Java C#Windows应用程序从streamsocket读取数据不可理解
我试图在服务器和客户端之间实现一个简单的StreamSocket通信。服务器用Java编写,客户端用C# 从客户端向服务器发送消息(字符串)可以正常工作。但另一方面,我遇到了一些麻烦 当我从服务器向客户机发送字符串时,我希望每个消息都从客户机打印出来 我在客户端初始化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 {
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应用程序中运行上面的代码来重现您的问题,但我无法重现这个问题。因此,到目前为止,您所展示的代码没有根本上的错误。如果您想获得有关问题的具体帮助,您需要提供可靠的重现问题的信息。