因特网socket编程,怎么遇到这两个奇怪的问题。。。

时间:2022-08-17 20:44:01
用距离较远的一台因特网上机器测试,有以下问题:
1、send和recv最大传输的数据报长度是1452,如果是大于等于1453个字节,客户端发送成功,服务端就阻塞在recv上,不知为什么。
2、服务端子线程监听到一个套接字后发送第一包数据,然后阻塞在recv,然后在主线程成功发送一个数据包的时候,子线程的recv返回SOCKET_ERROR.
在局域网测试却没有这些问题,请高人指点。

13 个解决方案

#1


使用什么SOCKET?
采用的组塞,非组塞?

1.这种情况,你需要在server端看看你发送的数据对不对
就是你是否成功的发送了1453个字节
2.同样你也需要看看是否接收到数据
如果数据正常,那就是是你的程序有问题了

#2


tcp连接,两端都是阻塞的,
主线程成功发送一个数据包的时候,对方也成功接到了这个数据包,然而子线程正在阻塞的recv返回了

#3


线程中是否循环

#4


抓一个包来看看

#5


肯定是没有处理好‘粘包’问题造成的。

#6


线程中是循环接收处理的,这跟粘包没有关系吧

#7


这是正常的。你用1500减去ip头,tcp头就是剩下这么多了。

在tcp/IP详解中有说。mtu

#8


KAO,把程序贴出来看,
用TCP协义还去管什么MTU
加我吧,158669899

#9


听你的意思,服务器根本没收到消息哦,为什么,就要看代码啦。

#10


感觉代码问题

#11


会不会是线程优先级问题?等下午贴代码

#12


真是奇怪,我的客户端如果连续发送数据,服务端就会阻塞,而如果客户端每发送一次数据后Sleep(1000)或者更长时间,就可以了

#13


为什么?

#1


使用什么SOCKET?
采用的组塞,非组塞?

1.这种情况,你需要在server端看看你发送的数据对不对
就是你是否成功的发送了1453个字节
2.同样你也需要看看是否接收到数据
如果数据正常,那就是是你的程序有问题了

#2


tcp连接,两端都是阻塞的,
主线程成功发送一个数据包的时候,对方也成功接到了这个数据包,然而子线程正在阻塞的recv返回了

#3


线程中是否循环

#4


抓一个包来看看

#5


肯定是没有处理好‘粘包’问题造成的。

#6


线程中是循环接收处理的,这跟粘包没有关系吧

#7


这是正常的。你用1500减去ip头,tcp头就是剩下这么多了。

在tcp/IP详解中有说。mtu

#8


KAO,把程序贴出来看,
用TCP协义还去管什么MTU
加我吧,158669899

#9


听你的意思,服务器根本没收到消息哦,为什么,就要看代码啦。

#10


感觉代码问题

#11


会不会是线程优先级问题?等下午贴代码

#12


真是奇怪,我的客户端如果连续发送数据,服务端就会阻塞,而如果客户端每发送一次数据后Sleep(1000)或者更长时间,就可以了

#13


为什么?