我试图在服务器和客户端之间实现简单的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
答案 0 :(得分: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();
}
我可以咬自己;)。谢谢你的提示。
DJTrust