程序很简单,局域网通信
C#服务端
IPEndPoint end_point = new IPEndPoint(IPAddress.Any, 6000);
TcpListener listener = new TcpListener(end_point);
listener.Start();
TcpClient client = listener.AcceptTcpClient();
NetworkStream streamToClient = client.GetStream();
byte[] buffer = new byte[1024];
streamToClient.Read(buffer, 0, 1024);
while (true)
{//收数据
int bytesRead = streamToClient.Read(buffer, 0, 1024);
if (bytesRead == 0)
break;
Console.WriteLine(BitConverter.ToSingle(buffer, 0));
}
手机上的Java客户端(单独线程)
public void run()
{
try {
client_socket = new Socket("192.168.0.100", 6000);
output = client_socket.getOutputStream();
} catch (IOException e) {}
while(true) {
try {//发数据
output.write(floatToBytes(idx += 1.0f));
try {
Thread.sleep(100);//延时100ms
} catch (InterruptedException e) {}
} catch (IOException e) {}
}
} 服务端理想的输出是
1 2 3 4 5 6 7 8 9 10 11 ......
但是输出是
2 4 6 8 10 12 ......
如果把客户端的延时改成
Thread.sleep(200); 可以得到正确输出
好像要隔200ms才能收到数据
在200ms毫秒内传输的数据都丢了
如果改成udp通信,同样的发数字,即使不延时都不会丢数据。
这是啥问题?