Java套接字从C#读取字节

时间:2014-02-13 14:44:38

标签: c# java sockets

我正在尝试读取从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);
}

3 个答案:

答案 0 :(得分:2)

虽然其他人已经提供了可能的解决方案,但我想说明我将如何解决这个问题。

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

我觉得这种方法会更加清晰。随意选择你更喜欢的。

澄清:您的接收代码中存在错误。您读取了最后一个字节但从未处理过它。在每次迭代时,您都会打印出上一次迭代中接收的字节值。因此,当数据为-1时,将处理最后一个字节,但是您不进入循环,因此不会打印。

答案 1 :(得分:1)

除非数据变为-1,否则您需要直读数据。 因此,如果结果为infinite loop,您需要在while(true) -1内移动阅读声明,然后从中发出一次。

试试这个:

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

答案 2 :(得分:-2)

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