UDP传输问题,大虾帮忙看看~(50分)

  • 主题发起人 主题发起人 lovermaple
  • 开始时间 开始时间
L

lovermaple

Unregistered / Unconfirmed
GUEST, unregistred user!
用NMUDP控件传输视频数据帧,每帧大小是921600,我改了project的线程传输数据限制,
可以一次就传输完,但是作为接收端却一点反应都没有
是不是数据的大了就丢失了,???
 
不知道怎么改了.可以要写出部分代码才好分析,希望有人做过类似的程序,
只能学习,帮忙顶一下了
 
使用UDP傳輸數據包,其字節大小不得超過2048byte,如果超過會產生不能正常接收的問題,建議採取分包的做法,即將一個數據包按2048字節分成若幹,然後在接收端將分開的數據庫組合。我採用的是stream分包合包的方法,不會產生丟失和錯誤
 
用stream怎么分包合包?这样还是要很久啊,
我分段传,延时太大了
郁闷,没人告诉我怎么解决吗?
或者给个压缩的原码给我?
用自带的那个zlib,好象还是大了, 不能传~
 
一点反应都没有,是不是端口和主机名不对?
建议用stream
发送:
var
MyStream:TMemoryStream;
begin
MyStream:=TMemoryStream.Create;
try
MyStream.Write( , );//参数
NMUDP1.SendStream(MyStream);
finally
MyStream.Free;
end;
end;
接收:
var
MyStream:TMemoryStream;
begin
MyStream:=TMemoryStream.Create;
try
NMUDP1.ReadStream(MyStream);
MyStream.Read( , )//参数
finally
MyStream.Free;
end;
end;
 
在局域網還是internet進行傳輸?在局域網不會產生延遲的,internet會根據網絡狀況或帶寬產生一定時間的延遲,或丟失數據包。
分包的方法是:
設置stream.Position:=0;
定義一個SendStream,其大小為2048byte,從stream中取出2044個byte對這個sendStream進行賦值,其余4個byte設置成這個數據包的序號。然後將這個sendStream從UDP控件發送出去。接收方接收到這樣的數據包,首先讀取數據包序號,然後再根據序號將若幹分開的數據包合成一個stream,這個stream與發送端的stream一致
 
后退
顶部