关于此问题QQ谈话内容:
觉悟(54156167) 14:36:51
CNUDP一次只能发送接收小于2048似呼不妥!
[川]IISUSER<
iisfirewall@126.com> 14:37:23
UDP的包限制吧
[川]IISUSER<
iisfirewall@126.com> 14:37:37
就算没收完 你可以继续收
觉悟(54156167) 14:37:41
不是
[川]IISUSER<
iisfirewall@126.com> 14:37:55
那你觉得啥不妥啊
[沪]管理员刘啸(21808552) 14:38:19
觉悟,你说的这个限制具体是指啥地方?
觉悟(54156167) 14:38:20
CnUDP.pas 522行
IBuffSize := WinSock.recvfrom(ThisSocket, IBuff, 2048, 0, from, i);
觉悟(54156167) 14:38:53
这样不好
[鄂]峪飞鹰(185845281) 14:39:33
udp的包大了,路由器会丢掉的
[川]IISUSER<
iisfirewall@126.com> 14:40:14
峪飞鹰 看我最上面发的问题
觉悟(54156167) 14:40:22
第一,这个包的大小限制不应写死,应可以定义
觉悟(54156167) 14:40:45
第二.cnUDP.sendbuf中应限制一下
[沪]管理员刘啸(21808552) 14:42:01
那是可以反复调用接收吧?
[沪]管理员刘啸(21808552) 14:42:10
这个2048是内部缓冲区大小。
[川]IISUSER<
iisfirewall@126.com> 14:42:47
2048很恰当
觉悟(54156167) 14:42:50
可是CNUDP没有反复接收啊,如果大于2048就会直接OVER了
[川]IISUSER<
iisfirewall@126.com> 14:43:06
[川]IISUSER<
iisfirewall@126.com> 14:43:17
有吗
觉悟(54156167) 14:43:53
直接略去了
[川]IISUSER<
iisfirewall@126.com> 14:44:22
个人感觉不会 你测试过了?
觉悟(54156167) 14:44:49
我当然试了
[沪]管理员刘啸(21808552) 14:45:13
我看了看代码似乎没这个循环。
[沪]管理员刘啸(21808552) 14:45:24
我先记下来,找找作者zjy看看。
觉悟(54156167) 14:45:25
没有
觉悟(54156167) 14:46:16
这就是论谈中有人说CNUDP只能发送小于1K(它的数据有误)文件的原因!..
觉悟(54156167) 14:47:55
另外反复接收的说法不准确吧。。。UDP一次发送只有一次接收吧,TCP才有分包接收吧....如果说错了,请指正
[沪]管理员刘啸(21808552) 14:48:52
分包是IP的规矩,这个倒是和TCP还是UDP没关系。
[沪]管理员刘啸(21808552) 14:49:50
要不觉悟把你的这段分析贴论坛的回帖里?让提这个问题的人也看看?
觉悟(54156167) 14:50:20
好的!