繁体   English   中英

Java套接字从C#读取字节

[英]Java socket read bytes from C#

我正在尝试从C#应用程序发送的Java应用程序中读取byte[]

但是,当我使用下面的代码在C#中将string编码为byte[]并在Java中读取它时,我得到了除最后一个字符以外的所有字符。 这是为什么?

Java接收代码:

int data = streamFromClient.read();
while(data != -1){
    char theChar = (char) data;
    data = streamFromClient.read();
    System.out.println("" + theChar);
}

C#发送代码:

public void WriteMessage(string msg){

    byte[] msgBuffer = Encoding.Default.GetBytes(msg);
    sck.Send(msgBuffer, 0, msgBuffer.Length, 0);
}

尽管其他人已经提供了可能的解决方案,但我想展示如何解决这个问题。

int data;
while((data=streamFromClient.read()) != -1) {
  char theChar = (char) data;
  System.out.println("" + theChar);
}

我只是觉得这种方法会更加清晰。 随意选择您更喜欢的那个。

需要说明的是:您的接收代码中有错误。 您读取了最后一个字节,但从未对其进行处理。 在每次迭代中,您都打印出前一次迭代中接收到的字节值。 因此,当数据为-1时将处理最后一个字节,但您无需进入循环,因此不会打印该循环。

您需要读取数据,直到它变为-1为止。 因此,您需要在infinite loopwhile(true)内移动读取语句,如果结果为-1则从语句中取出一次。

尝试这个:

 int data = -1;
 while(true){
 data=streamFromClient.read();
 if(data==-1)
 {     
    break;
 }
 char theChar = (char) data;     
 System.out.println("" + theChar);
 }

我以为您的while循环可能以某种方式被1次迭代关闭了,但是在我看来,您的C#程序根本就没有发送所有字符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM