如何用idUDPClient把图片流发送到另一台机器上。

ximin 2005-09-22 06:36:14
我用idUDPClient发送JPG图片,AData收到数据大小虽然与发送的一样,但内容根本就不是发送的东西。
...全文
240 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
gunziyigen 2005-09-28
  • 打赏
  • 举报
回复
是执行到jpgstream.SaveToStream(memoryStream);的时候报错,请兄弟帮忙,如果是完整的代码就最好了
gunziyigen 2005-09-28
  • 打赏
  • 举报
回复
我在用上面的代码编译时没错,执行到jpgstream.SaveToFile('e:\s.jpg');时报错,怎么回事
ximin 2005-09-28
  • 打赏
  • 举报
回复
已经试过了,方法果然应验。

悟:发送方必须是buffer中的数据(字符数据),接收方才能正确接收.而不能把一个流直接发送!
ximin 2005-09-28
  • 打赏
  • 举报
回复
多谢老兄指点
ximin 2005-09-27
  • 打赏
  • 举报
回复
UP
old_wei 2005-09-27
  • 打赏
  • 举报
回复
改了一下
var p: Pointer;
mdata:array[1..10000] of char;
k:integer;

ss:=tcanvas.Create;
ss.Handle:=getdc(0);
sb:=tbitmap.Create;
sb.Width:=screen.Width;
sb.Height:=screen.Height;
sb.PixelFormat:=pf16bit;
f:=bitblt(sb.Canvas.Handle,0,0,sb.width,sb.height,ss.Handle,0,0,srccopy);
if f then sb.SaveToFile('i:\ssss.bmp');
jpgstream:= TJPEGImage.Create;
jpgstream.Assign(sb);
jpgstream.CompressionQuality:=20; {压缩质量}
jpgstream.Compress;
jpgstream.SaveToStream(memoryStream);{保存为JPG流}
jpgstream.SaveToFile('i:\ss.jpg');
jpgstream.free;
//ReleaseDC(0,ss.Handle);
//s:=edit1.text;
//idudpclient1.SendBuffer(memoryStream,memoryStream.Size);
P:=FStream.Memory;
FStream.Position:=0;
for k:=1 to memorystream.Size do mdata[k]:=pchar(dword(P)+k-1)^;
IdUDPClient1.SendBuffer(mdata,memorystream.Size);

memorystream.Free;


//你再试一下
ximin 2005-09-23
  • 打赏
  • 举报
回复
直接用(adata as tmemoryStream).saveAsfile('I:\s.jpg')存图片也不行。

大小一样,但内容不是发送的内容。
ximin 2005-09-23
  • 打赏
  • 举报
回复
程序还是有问题呀。请老兄帮忙指点一下。
发送端:(获得屏幕图片 发送流)
ss:=tcanvas.Create;
ss.Handle:=getdc(0);
sb:=tbitmap.Create;
sb.Width:=screen.Width;
sb.Height:=screen.Height;
sb.PixelFormat:=pf16bit;
f:=bitblt(sb.Canvas.Handle,0,0,sb.width,sb.height,ss.Handle,0,0,srccopy);
if f then sb.SaveToFile('i:\ssss.bmp');
jpgstream:= TJPEGImage.Create;
jpgstream.Assign(sb);
jpgstream.CompressionQuality:=20; {压缩质量}
jpgstream.Compress;
jpgstream.SaveToStream(memoryStream);{保存为JPG流}
jpgstream.SaveToFile('i:\ss.jpg');
jpgstream.free;
ReleaseDC(0,ss.Handle);
s:=edit1.text;
idudpclient1.SendBuffer(memoryStream,memoryStream.Size);
memorystream.Free;
//经查看,ss.jpg是正常图片文件。


接收端:

ms:=tmemoryStream.Create;
adata.Position:=0;
ms.LoadFromStream(adata);
ms.SaveToFile('i:\s.jpg');
ms.Free;
//s.jpg不正常,大小与ss.jpg一致,但不能显示。用源码查看工具比较s.jpg与ss.jpg内容根本不同。
bj20082005 2005-09-23
  • 打赏
  • 举报
回复
up
old_wei 2005-09-23
  • 打赏
  • 举报
回复
Jpeg:=tjpegimage.Create;
try
AData.Position:=0 ;
Jpeg.LoadFromStream(AData);
Image9.Picture.Bitmap.Assign(Jpeg);
finally //以下为清除工作
Jpeg.free;
end;
old_wei 2005-09-23
  • 打赏
  • 举报
回复
你要把指针归零,AData.Position:=0 ;
就可以了。

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧