如果 UDP Socket 使用端口 aaaa 发送数据的同时,有数据发到 aaaa,会不会造成数据丢失?(100分)

  • 主题发起人 主题发起人 940801
  • 开始时间 开始时间
9

940801

Unregistered / Unconfirmed
GUEST, unregistred user!
如果 UDP Socket 使用端口 aaaa 发送数据的同时,有数据发到 aaaa,会不会造成数据丢失?
如果会丢失,那又该怎样做才能防止呢?

对于 TCP 遇到这种情况又会怎么样呢?
 
发送和接收用一个,可以吧.
delphi自带的udp例子就是用一个,没问题。
tcp应该也可以
 
To Toylin: 发送和接收是用的一个,对同一端口的发送和接收能够用多个相同的 UDP 控件吗?

我现在确实是碰到了收到的数据丢失,我怀疑是发生在发送的同时。请详细的说一下好吗?

Delphi 带的那些个例子我都读过,我觉得它们根本就没有考虑这种情况啊,也许不会丢失,
但我希望高手能从 WinSock 原理上指点一下
 
这种情况是不会丢失的,因为无论TCP还是UDP协议栈中都存在两个缓冲区,即
发送缓冲区和接收缓冲区,你写的程序调用发送函数sendto时,其实数据并没有马上
发送出去,而是被操作系统拷贝到了发送缓冲区,具体的发送是系统协议栈处理的,
接收也是一样,来的数据是先接到了接收缓冲区中,你调用recvfrom只是从接收缓冲
中读数据,因此,你说的丢失数据问题不存在,除非是因为你的数据量太大,将缓冲区
塞满,这样再来数据就写不到缓冲区中,也就丢失了..
 
Kent 兄高明,有道理。

能否再请教这个缓冲区缺省的是多大?怎样在程序中改变它?
 
不好意思,Windows下的缓冲大小具体多少我也不清楚,应该不小于8K,
我觉得你说的丢失数据的问题不是因为缓冲区太小造成的,而是程序设计上
可能有小bug,我很早以前在Win下面做过传送数据的程序,也是用UDP,
每秒传送长度为256的记录200条左右,不会丢失数据。
如果你的数据量真的很大的话,建议使用高档网卡...
 
后退
顶部