异步发送数据可能引发的问题思考!!! ( 积分: 200 )

  • 主题发起人 主题发起人 mywyn
  • 开始时间 开始时间
M

mywyn

Unregistered / Unconfirmed
GUEST, unregistred user!
假如我们采用WSASend异步发送数据,在大部分情况下都会一次发送完成(当然这只是表明数据被系统接受,并不说已发送到了远程主机)。而在网络繁忙的情况下,可能只发送成功一部分数据,而我们通常的做法是继续发送剩余的字节直到全部发送完成为止。

我们考虑这么一种情况:
1.发送数据A
2.发送数据B
.............
3.A数据发送异步返回 只发送40%
继续发送
4.B数据发送 异步返回 只发送60%
继续发送
...........................
5.A数据发送异步返回 完成
6.B数据发送异步返回 完成
.................................
程序员的原意是 A数据发送--->B数据发送
由于我们无法控制3、4步到底谁先发生,所以有可能变成这样:
A数据发送40%->B数据发送60%->B数据发送40%->A数据发送40%
可以肯定,远程主机接受的数据也将完全错位。

各位高手,有没有好的办法???
 
假如我们采用WSASend异步发送数据,在大部分情况下都会一次发送完成(当然这只是表明数据被系统接受,并不说已发送到了远程主机)。而在网络繁忙的情况下,可能只发送成功一部分数据,而我们通常的做法是继续发送剩余的字节直到全部发送完成为止。

我们考虑这么一种情况:
1.发送数据A
2.发送数据B
.............
3.A数据发送异步返回 只发送40%
继续发送
4.B数据发送 异步返回 只发送60%
继续发送
...........................
5.A数据发送异步返回 完成
6.B数据发送异步返回 完成
.................................
程序员的原意是 A数据发送--->B数据发送
由于我们无法控制3、4步到底谁先发生,所以有可能变成这样:
A数据发送40%->B数据发送60%->B数据发送40%->A数据发送40%
可以肯定,远程主机接受的数据也将完全错位。

各位高手,有没有好的办法???
 
简单的方法就是同步一下,保证每次都完整的放到发送缓冲区中。 虽然在一定程度上降低了效率。
 
异步方法,应该有个发送完毕的通知事件,
在这个通知事件里面再开始发送B数据
 
你用的是什么协议?TCP?UDP?
如果不考虑硬件的原因,除非程序有问题,否则TCP应该不会丢包。
 
这种情况是无法保证的
 
这种情况是无法保证的
 
后退
顶部