使用UDP发送流时出现一个奇怪的问题 ( 积分: 30 )

  • 主题发起人 主题发起人 siaosa
  • 开始时间 开始时间
S

siaosa

Unregistered / Unconfirmed
GUEST, unregistred user!
客户端发送代码
var
mc:TMemoryStream;
begin
mc:=TMemoryStream.Create;
Image1.Picture.Bitmap.LoadFromFile('c:/001.bmp');
Image1.Picture.Bitmap.SaveToStream(mc);
mc.Position:=0;
idUDPClient1.SendBuffer(mc,mc.Size);
mc.Free;
end;

服务端接收代码
var
mc:TMemoryStream;
begin
mc:=TMemoryStream.Create;
mc.CopyFrom(AData,AData.Size);
mc.Position:=0;
mc.SaveToFile('c:/002.bmp');
end;
接端接收到文件的字节数是正确的,但002.bmp找开没有任何内容.为什么?
 
客户端发送代码
var
mc:TMemoryStream;
begin
mc:=TMemoryStream.Create;
Image1.Picture.Bitmap.LoadFromFile('c:/001.bmp');
Image1.Picture.Bitmap.SaveToStream(mc);
mc.Position:=0;
idUDPClient1.SendBuffer(mc,mc.Size);
mc.Free;
end;

服务端接收代码
var
mc:TMemoryStream;
begin
mc:=TMemoryStream.Create;
mc.CopyFrom(AData,AData.Size);
mc.Position:=0;
mc.SaveToFile('c:/002.bmp');
end;
接端接收到文件的字节数是正确的,但002.bmp找开没有任何内容.为什么?
 
UDP不是为流发送准备的。
最好使用TCP,那样你可以放心的发送文件流。
一般使用UDP发送大文件是因为UDP的开销小,但都需要自己在应用层实现自己的检查协议,确保数据包的大小正确,顺序正确且没有重复。
 
UDP 不是顺序的可靠的协议,一点都不起怪
 
我的这段代码很简单,而且发送的内容不到5K,UDP真的这么差吗?
 
我试过,不用担心没有问题的。
但是UDP一次传输的信息不易过多,所以最好将数据拆成小于4K的包,然后加上识别码和顺序号再发出,接收端接收到所有的包之后,按照顺序号将同一个识别码的所有包拼成一个整包,然后再用流的方式转换成BMP,一切就OK了。
肯定可以的。
 
To:硕鼠
这代码在我这执行不行啊,发过来的文件打开没有内容,但文件的字节数正确.
 
UDP每次发送的数据是有限,最大多少字节我也不清楚,所以最好是分成几分发送。我也做过用UDP(INDY)发过图片,绝对没问题~~~~如果想要源发请给我E_main:wzwcn@163.com
 
UDP 建议的包大小 < 512 字节
 
看看我的能否对你有帮助?
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2478536
 
后退
顶部