Java C#Windows应用程序从streamsocket读取数据不可理解

Java C#Windows应用程序从streamsocket读取数据不可理解,java,c#,datareader,stream-socket-client,Java,C#,Datareader,Stream Socket Client,我试图在服务器和客户端之间实现一个简单的StreamSocket通信。服务器用Java编写,客户端用C# 从客户端向服务器发送消息(字符串)可以正常工作。但另一方面,我遇到了一些麻烦 当我从服务器向客户机发送字符串时,我希望每个消息都从客户机打印出来 我在客户端初始化StreamSocket,如下所示: public async void startConn() { StreamSocket streamSocket = new StreamSocket(); try {

我试图在服务器和客户端之间实现一个简单的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
     }
}
...
while(!(in.readLine().equals("quit")))
{
   String str = in.readLine();
   out.println(str);
   out.flush();
}
...
我希望,客户机打印出服务器上的每个字符串,甚至是消息的长度。但是,如果我从服务器向客户端发送消息,它不会立即打印每个字符串,尽管我将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),并且
未使用BufferLength
。但每次我都有同样的结果。谁能告诉我,怎么了

致意
DJTrust

是的,问题出在服务器端。我非常确信,java代码是正确的,这是难以置信的,因为这方面非常简单。我太专注于客户端了

我的错误如下:

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
     }
}
...
while(!(in.readLine().equals("quit")))
{
   String str = in.readLine();
   out.println(str);
   out.flush();
}
...
在.readLine()中有一个
。现在正确的方法是:

String str = "";
while(!(str.equals("quit")))
{
   str = in.readLine();
   out.println(str);
   out.flush();
}
我可以咬自己。谢谢你的提示


DJTrust

您能否更具体地了解服务器的行为?发送的每个字符串之间的时间间隔是多少?发送的字符串是否没有任何分隔符(例如换行符)?您确定服务器工作正常吗?您是否尝试过使用常规的桌面.NET程序而不是WinRT API来测试服务器?值得一提的是,我尝试通过实现一个简单的服务器来发送您描述的字符串,并在基本的WinRT应用程序中运行上面的代码来重现您的问题,但我无法重现这个问题。因此,到目前为止,您所展示的代码没有根本上的错误。如果您想获得有关问题的具体帮助,您需要提供可靠的重现问题的信息。