两次发送的信息为什么一次就能全部接收到?这个问题怎样解决?在线等~~~谢谢

时间:2022-09-13 21:02:09
当服务器给客户端连续发送两次信息时,客户端一次就接收到了,这个问题怎样解决呢?这不是我希望的,希望是分开接收

11 个解决方案

#1


帮帮忙,我是没有分了

#2


从你的数据格式上区别.

#3


TCP肯定要自己组包拆包了。

#4


ft!说明你发送太快!接受太慢了!所以都再socket的缓存里面!所以一次就收到了!

所以你发第2个包之前,一定要客户端!发送了ack回应以后再发!

#5


最简单的方法
好象有个函数是清空tcp/ip缓冲区?//意思是这样
//大致是¥%flush¥#%¥#什么的
可以确定所有待发送数据全部发送完
//在这方面我看linux下的实现更多些
但win下也应该有的
然后再发送
找找msdn吧

#6


同意sharkhuang(爱情和程序都读不懂) ( )

#7


我在开发中经常遇到此类问题,解决起来非常简单,仅需将通讯报文的结构进行重新定制,以下是我在开发中经常使用的报文格式:
MSG_TEMPLATE
{
  WORD  msgLen;
  DWORD dwValidateID;
  WORD  msgType;
  ...
}
在这个结构中msgLen是非常主要的,它表示整个报文的长度,与此同时,在接收端准备一个大型的缓冲区,将每次接收的数据压入该buffer,至此,现判断报文的长度,如果buffer中数据的长度,满足该长度,便将其取出,buffer后面的数据先前移动,利用该模式,每次都将能够获得整长的数据报文,同时你的程序也不会受到tcp底层机制的干扰。

#8


自己确定边界。不然没什么好办法。

#9


好象可以用数据报的格式传送数据,一次就只能读取一帧了

#10


大多数OS的TCP配置默认启用Nagle算法。

如果不想使用Nagle算法,可以在Setsockopt选项中,使用TCP_NODELAY参数将其禁止掉。

#11


即使关闭NAGLE算法,可能还是没用,因为客户端好像不可能一直在等的吧。而且两个包堵在路上的话,同时到达。。

#1


帮帮忙,我是没有分了

#2


从你的数据格式上区别.

#3


TCP肯定要自己组包拆包了。

#4


ft!说明你发送太快!接受太慢了!所以都再socket的缓存里面!所以一次就收到了!

所以你发第2个包之前,一定要客户端!发送了ack回应以后再发!

#5


最简单的方法
好象有个函数是清空tcp/ip缓冲区?//意思是这样
//大致是¥%flush¥#%¥#什么的
可以确定所有待发送数据全部发送完
//在这方面我看linux下的实现更多些
但win下也应该有的
然后再发送
找找msdn吧

#6


同意sharkhuang(爱情和程序都读不懂) ( )

#7


我在开发中经常遇到此类问题,解决起来非常简单,仅需将通讯报文的结构进行重新定制,以下是我在开发中经常使用的报文格式:
MSG_TEMPLATE
{
  WORD  msgLen;
  DWORD dwValidateID;
  WORD  msgType;
  ...
}
在这个结构中msgLen是非常主要的,它表示整个报文的长度,与此同时,在接收端准备一个大型的缓冲区,将每次接收的数据压入该buffer,至此,现判断报文的长度,如果buffer中数据的长度,满足该长度,便将其取出,buffer后面的数据先前移动,利用该模式,每次都将能够获得整长的数据报文,同时你的程序也不会受到tcp底层机制的干扰。

#8


自己确定边界。不然没什么好办法。

#9


好象可以用数据报的格式传送数据,一次就只能读取一帧了

#10


大多数OS的TCP配置默认启用Nagle算法。

如果不想使用Nagle算法,可以在Setsockopt选项中,使用TCP_NODELAY参数将其禁止掉。

#11


即使关闭NAGLE算法,可能还是没用,因为客户端好像不可能一直在等的吧。而且两个包堵在路上的话,同时到达。。