0

我正在尝试实现服务器和客户端之间的简单 StreamSocket 通信。服务器用 Java 编写,客户端用 C# 编写。

从客户端向服务器发送消息(字符串)可以正常工作。但反过来,我遇到了一些麻烦。

当我从服务器向客户端发送一个字符串时,我希望每条消息都从客户端打印出来。

我在客户端初始化我的 StreamSocket,如下所示:

public async void startConn()
{
   StreamSocket streamSocket = new StreamSocket();
   try
     {
       await streamSocket.ConnectAsync(new Windows.Networking.HostName(server), port.ToString());

       DataReader reader = new DataReader(streamSocket.InputStream);
       reader.InputStreamOptions = InputStreamOptions.Partial;
       reader.UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf8;
       var count = await reader.LoadAsync(256);

       while (true)
       {
         string text = reader.ReadString(count);           
         Debug.WriteLine("Message: " + text);
         count = await reader.LoadAsync(256);
       }  
     }catch (Exception e)
     {
       //TODO
     }
}

我想要,客户端打印出服务器上的每个字符串,即使消息有多长。但是,如果我从服务器向客户端发送消息,尽管我将 StreamSocket 的选项设置为Partial.

例如:

Server send:   Hello         Client: print out nothing
Server send:   Today         Client: print out "Hello"
Server send:   Hi            Client: print out nothing
Server send:   Bye           Client: print out "Hi"

我尝试了不同版本的LoadAsync()其他尺寸(不是 256)和UnconsumedBufferLength. 但每次我都有相同的结果。谁能告诉我,怎么了?

最好的问候 DJTrust

4

1 回答 1

0

是的,问题出在服务器端。难以置信,我很确定,Java 代码是正确的,因为这方面真的很容易。我太专注于客户端。

我的错误如下:

...
while(!(in.readLine().equals("quit")))
{
   String str = in.readLine();
   out.println(str);
   out.flush();
}
...

有一个in.readLine()太多了。现在正确的方法是:

String str = "";
while(!(str.equals("quit")))
{
   str = in.readLine();
   out.println(str);
   out.flush();
}

我可以咬自己;)。感谢您的提示。

DJ 信托

于 2015-03-29T16:17:22.900 回答