D
Delphi On Me
Unregistered / Unconfirmed
GUEST, unregistred user!
我想用UDP协议广播数据。
书上说;用UDP广播数据,数据报的数据部分不应超过512字节,
所以我就把数据分割成420字节大小的包发送出去,
但是总是不能完整地接收到,一般只能正确地接收40个左右的包
无奈之下,用NetXRay跟踪了一下,
发现前面几十个UDP数据包都是420字节,
紧接着一个UDP包大小为832字节
再往下的UDP包大小为1522字节。
这说明:数据包并不是按我所想的那样每次只发送420个字节。
想请教各位:该怎么把数据分割成块广播出去?
我现在用的方法是:
SendSkt.Close;
SendSkt.Proto := 'udp';
SendSkt.Addr := '255.255.255.255';
SendSkt.Port := '3100';
SendSkt.LocalPort := '0';
SendSkt.Connect;
pn :=1;
while(m.position<m.size)do
begin
if (m.Size - m.Position>DataSize) then
begin
pkt.PktNo := pn;
Inc(pn);
pkt.size := DataSize;
pkt.Flag := 1;
m.Read(pkt.Data,DataSize);
end
else
begin
pkt.PktNo := pn;
Inc(pn);
pkt.size := m.Size - m.Position;
pkt.Flag := 0;
m.Read(pkt.Data,m.Size - m.Position);
end;
SendSkt.Send(@pkt,sizeof(TPacket));
end;
SendSkt是ICS的TWSocket;
BTW:请不要告诉我这是因为UDP不可靠的原因。
不知大家有没有用过e/pop?它也是用UDP广播的,
传送几兆大小的数据简直是万无一失。
书上说;用UDP广播数据,数据报的数据部分不应超过512字节,
所以我就把数据分割成420字节大小的包发送出去,
但是总是不能完整地接收到,一般只能正确地接收40个左右的包
无奈之下,用NetXRay跟踪了一下,
发现前面几十个UDP数据包都是420字节,
紧接着一个UDP包大小为832字节
再往下的UDP包大小为1522字节。
这说明:数据包并不是按我所想的那样每次只发送420个字节。
想请教各位:该怎么把数据分割成块广播出去?
我现在用的方法是:
SendSkt.Close;
SendSkt.Proto := 'udp';
SendSkt.Addr := '255.255.255.255';
SendSkt.Port := '3100';
SendSkt.LocalPort := '0';
SendSkt.Connect;
pn :=1;
while(m.position<m.size)do
begin
if (m.Size - m.Position>DataSize) then
begin
pkt.PktNo := pn;
Inc(pn);
pkt.size := DataSize;
pkt.Flag := 1;
m.Read(pkt.Data,DataSize);
end
else
begin
pkt.PktNo := pn;
Inc(pn);
pkt.size := m.Size - m.Position;
pkt.Flag := 0;
m.Read(pkt.Data,m.Size - m.Position);
end;
SendSkt.Send(@pkt,sizeof(TPacket));
end;
SendSkt是ICS的TWSocket;
BTW:请不要告诉我这是因为UDP不可靠的原因。
不知大家有没有用过e/pop?它也是用UDP广播的,
传送几兆大小的数据简直是万无一失。