java 对局域网丢包_java与C#进行TCP局域网通信,丢包严重,怎么解决?

在Java客户端与C#服务端通过TCP进行局域网通信时,发现丢包现象严重。当Java客户端发送数据间隔100ms时,服务端接收数据显示为偶数序列(2, 4, 6...),而将间隔增加到200ms时能正常接收到所有数据。尝试使用UDP通信则没有丢包问题。这可能是TCP滑动窗口机制或拥塞控制导致的,需要调整TCP参数或考虑使用UDP来优化通信效率。" 115822141,10324680,Java项目POM文件丢失:强制Maven使用本地库,"['Maven配置', 'Java开发', '项目构建', '依赖管理']
摘要由CSDN通过智能技术生成

程序很简单,局域网通信

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通信,同样的发数字,即使不延时都不会丢数据。

这是啥问题?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值