我已经与Tomcat Java服务器建立了连接。
发送登录数据后,服务器响应。响应的长度未知。
所以我正在尝试使用DataReader.UnconsumedBufferLength逐字节读取字节
DataReader din = new DataReader(socket.InputStream);
int i = 0;
byte[] b = new byte[64];
await din.LoadAsync(1);
while(din.UnconsumedBufferLength > 0)
{
din.LoadAsync(1);
b[i] = din.ReadByte();
await din.LoadAsync(1)
i++;
}
这种解决方案有效,我将消息放入字节数组中,但远非理想。相应的Java客户端使用这一行代码
BufferedInputStream inFromServer = new BufferedInputStream(socket.getInputStream());
int read = 0;
byte[] result = new byte[100];
read = inFromServer.read(result);
我希望在C#中有一个同样简单的解决方案。
在C#中,您发布的Java代码绝对容易实现。实际上,您当前正在使用的C#版本使用异步调用,这比对流的简单调用要复杂得多。如果要在C#中使用缓冲流而不进行异步调用,则可以只Read
在该流上使用。一样容易:
socket.InputStream.Read()
在您的Java代码中,您似乎正在使用大小为100的缓冲区来读取流。您仅读取流的100个字节,而不是一直读取到最后。如果那是您想要的,您可以执行以下操作:
byte[] b = new byte[100];
int readTo = socket.InputStream.Read(b, 0, 100);
另外,如果您想一路走到尽头,请在此处使用Jon Skeet的答案。没有比这更好的了。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句