9 940801 Unregistered / Unconfirmed GUEST, unregistred user! 2001-08-21 #1 如果 UDP Socket 使用端口 aaaa 发送数据的同时,有数据发到 aaaa,会不会造成数据丢失? 如果会丢失,那又该怎样做才能防止呢? 对于 TCP 遇到这种情况又会怎么样呢?
T Toylin Unregistered / Unconfirmed GUEST, unregistred user! 2001-08-21 #2 发送和接收用一个,可以吧. delphi自带的udp例子就是用一个,没问题。 tcp应该也可以
9 940801 Unregistered / Unconfirmed GUEST, unregistred user! 2001-08-21 #3 To Toylin: 发送和接收是用的一个,对同一端口的发送和接收能够用多个相同的 UDP 控件吗? 我现在确实是碰到了收到的数据丢失,我怀疑是发生在发送的同时。请详细的说一下好吗? Delphi 带的那些个例子我都读过,我觉得它们根本就没有考虑这种情况啊,也许不会丢失, 但我希望高手能从 WinSock 原理上指点一下
To Toylin: 发送和接收是用的一个,对同一端口的发送和接收能够用多个相同的 UDP 控件吗? 我现在确实是碰到了收到的数据丢失,我怀疑是发生在发送的同时。请详细的说一下好吗? Delphi 带的那些个例子我都读过,我觉得它们根本就没有考虑这种情况啊,也许不会丢失, 但我希望高手能从 WinSock 原理上指点一下
K Kent Unregistered / Unconfirmed GUEST, unregistred user! 2001-08-21 #4 这种情况是不会丢失的,因为无论TCP还是UDP协议栈中都存在两个缓冲区,即 发送缓冲区和接收缓冲区,你写的程序调用发送函数sendto时,其实数据并没有马上 发送出去,而是被操作系统拷贝到了发送缓冲区,具体的发送是系统协议栈处理的, 接收也是一样,来的数据是先接到了接收缓冲区中,你调用recvfrom只是从接收缓冲 中读数据,因此,你说的丢失数据问题不存在,除非是因为你的数据量太大,将缓冲区 塞满,这样再来数据就写不到缓冲区中,也就丢失了..
这种情况是不会丢失的,因为无论TCP还是UDP协议栈中都存在两个缓冲区,即 发送缓冲区和接收缓冲区,你写的程序调用发送函数sendto时,其实数据并没有马上 发送出去,而是被操作系统拷贝到了发送缓冲区,具体的发送是系统协议栈处理的, 接收也是一样,来的数据是先接到了接收缓冲区中,你调用recvfrom只是从接收缓冲 中读数据,因此,你说的丢失数据问题不存在,除非是因为你的数据量太大,将缓冲区 塞满,这样再来数据就写不到缓冲区中,也就丢失了..
9 940801 Unregistered / Unconfirmed GUEST, unregistred user! 2001-08-21 #5 Kent 兄高明,有道理。 能否再请教这个缓冲区缺省的是多大?怎样在程序中改变它?
K Kent Unregistered / Unconfirmed GUEST, unregistred user! 2001-08-21 #6 不好意思,Windows下的缓冲大小具体多少我也不清楚,应该不小于8K, 我觉得你说的丢失数据的问题不是因为缓冲区太小造成的,而是程序设计上 可能有小bug,我很早以前在Win下面做过传送数据的程序,也是用UDP, 每秒传送长度为256的记录200条左右,不会丢失数据。 如果你的数据量真的很大的话,建议使用高档网卡...
不好意思,Windows下的缓冲大小具体多少我也不清楚,应该不小于8K, 我觉得你说的丢失数据的问题不是因为缓冲区太小造成的,而是程序设计上 可能有小bug,我很早以前在Win下面做过传送数据的程序,也是用UDP, 每秒传送长度为256的记录200条左右,不会丢失数据。 如果你的数据量真的很大的话,建议使用高档网卡...