UDP数据包大小的问题(50分)

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

meilixueshan200

Unregistered / Unconfirmed
GUEST, unregistred user!
Const
BufSize=768;
type
TUserData=packed record
buf:Array[0..BufSize-1]of char;
msize:integer;
end;
我把UDP的BufferSize初始设到了12020,可是上面的BufSize=768的时候是对的,可是只要超过1024就收不到包了,为什么?
我怎么做,才能让BufSize的值可以设到6144?
 
不是收不了,是大了发不出,你还是用indy面板里的那些控件吧.
 
不能超过1420,
 
我用的就是idUDPClient和idUDPServer组件
而且现在出现了一种情况,就是发送过去的信息,出现了收到一部分,别一部分收不到
就是用户名的前三个字符不显示,IP显示一半,端口显示一半
本来用户名应该是123123,IP是59.82.154.112,端口是9100
结果收到的却是:用户为123,IP是.154.112,端品是00
这是为什么呀?
 
不能超过2048 Byte两KB。 最好定义不要超过200字节,特别是在Intenet上传输。
type
PUdpPack = ^TUdpPack;
TUdpPack = record
IP: array [0..15] of Char;
Port: Integer;
BufSize: Integer;
Buf: array [0..100-1] of Char;
end;
 
现在的问题怎么解决呀?
另外,我想问是把Port设为array[0..5]of char好,还是设为integer好
两者有什么差别吗?
 
一次发不了就分多次发啊~~~~
indyudp需要设置BufSize
 
如何多次发?
如果多次发,对于图片来说,会不会出现乱包,从而导致图片拼不起来?
 
MTU会导致IP包分片的
 
那请问如何重组呢?
 
不会吧?我用UDP发视频流每个包 4096 byte 发的很好啊!
 
看你用于什么地方了。建议你最好将数据包放小一些。
一般来说
IP包头:20字节
TCP包头:20字节
UDP包头:8字节
在以太网上一个数据包的长度是1500。
这样的话建议你使用小于1472的数据长度。
当然了,你用的大了。网络层也可以给你自动分开。但是这样不太好。不好处理粘包。
 
把控件的buffersize设为12020
 
多人接受答案了。
 
后退
顶部