首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

socket怎么传图片

2013-11-20 
socket如何传图片使用socket传递文字已经没有问题,但是试图传图片的时候发现server端有sendstream,但是cli

socket如何传图片
使用socket传递文字已经没有问题,但是试图传图片的时候发现server端有sendstream,但是client端没有receivestream,只有receivebuf。但是如果使用receivebuf会发现,传过去的东西和接收到的东西是不一样的,导致无法还原成图片。
请问这个问题是怎么解决的?
[解决办法]
socket没用过
DATASNAP很简单
[解决办法]
就是用Receivebuf,来接收数据图片数据,发送图片之前,应该发送此图片的大小,格式之类的。此信息应用结构体,且最好使用Ansci字符。发送此结构体,请使用SendBuf,然后再用SendStream发送图片。接收时,先接收此结构体,以获取图片信息,再循环接收字节数据,用WriteFile,或 TMemoryStream 来保存接收到的字节数。接收等于图片大小时,就进行下次监听。
流程如下:
  客户端:发送图片结构体-发送图片。
  服务器:接收图片结构体-获取图片字节数-循环接收图片,直到接收到的总字节数=图片大小。

图片结构体如下所示:
 


  type
     TFileInfo = record 
       dwFileSize: DWORD;                        //图片大小(节字)
       szFileName: array [0..255] of AnsiChar;   //文件名
     end;

[解决办法]
用流进行传输
[解决办法]
socket发送文字与图片有什么区别吗  不都是字节流吗。buf:array of byte.
你接收的发送不一样,只能是转换错了
[解决办法]
不需要转换了,通信的传输是单位是字节(Byte),将用WriteFile 或 TMemoryStream中的WirteBuffer 直接写入即可。如下所示:

var
  Buff: array [0..1023] of Byte;  //缓冲区
  ms: TMemoryStream;              //内存流
  iRcv: integer;                  //接收到的数据长度
begin
  ms := TMemoryStream.Create;
  ZeroMemory(@Buff, 1024);        //初始化缓冲区    
  try
   while (...) do
   begin
    iRcv := recv(.....); 
 
    ms.WriteBuff(Buff, iRcv);
   end
   ms.SaveToFile('test.txt');
  finally
   ms.free
  end;
end


热点排行