【发布时间】:2019-06-06 17:17:42
【问题描述】:
我正在编写服务器 (Java) - 客户端 (Android/Java) 应用程序。服务器是W7。所有的通信都很顺利,直到客户端中的一次读取冻结并停止读取数据,直到我再发送 2 次。
未读取的数据是字节数组。我再说一遍,到目前为止,所有的沟通都很顺利。
这是我用来发送数据的代码:
Long lLength = new Long(length);
byte [] bLength = this.longToBytes(lLength.longValue());
dos.write(bLength);
dos.flush();
dos.write(bLength);
dos.flush();
dos.write(bLength);
dos.flush();
此代码将 long 值转换为 8 字节数组。正如我所说,当执行第一次写入时(并且客户端正在等待数据),读取还没有完成。直到我执行最后一个 write() 才完成。
这是阅读它的代码:
byte length[] = {0,0,0,0,0,0,0,0};
dis.read(length);
我使用Wireshark嗅探流量,可以看到字节数组已发送,客户端回复ACK,但读取未完成。
在客户端和服务器中,套接字设置如下:
socket = new Socket(sIP, oiPort.intValue());
dos = new DataOutputStream(socket.getOutputStream());
dis = new DataInputStream(socket.getInputStream());
这快把我逼疯了……我不知道为什么,当我以与往常一样的方式发送数据时,应用程序有时会停止读取数据。
我想问题可能出在客户端套接字的输入缓冲区中……但我不知道该怎么做或尝试什么……
假设我也在 WXPSP3 中测试过服务器,但它仍然无法正常工作。
【问题讨论】: