救命啊!如何传输图象?(100分)

  • 主题发起人 主题发起人 jineric
  • 开始时间 开始时间
J

jineric

Unregistered / Unconfirmed
GUEST, unregistred user!
吾想传输一BMP文件到另一台机器显示,我是这样做的:

传输端:
var stream: TMemoryStream;

stream.LoadFromFile('c:/xxx.bmp');
ServerSocket1.Socket.Connections[0].SendStream(stream);
ServerSocket1.Socket.Connections[0].SendText('ok');

接受端:

var stream: TMemoryStream;

procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var
b: array [1..10000] of Byte;
len: integer;
begin
len:= Socket.ReceiveLength;
if len <> 2 then
begin
Socket.ReceiveBuf(stream,len); //因为socket不能一次把数据传
stream.Write(b,len); //到接受端,所以得拼接。
end
else
begin
stream.Position:=0; //如果收到'ok'就显示,并
//把position的位置置0.
image1.Picture.Bitmap.LoadFromStream(stream);
end;
end;

可我在接受端就是得不到图象,也不知道错在哪里?
望各位一定要鼎力帮助我哦!!!
 
用判断Len的方法可不好。
何不先发送文件长度,然后再发送文件。或者直接发文件,发完就断掉连接。
 
to tqz:
你的方法我接受,我回去就该!
还有,Socket.ReceiveBuf能不能直接把数据送入stream中,
而不需要再通过buffer传给stream? 即Socket.ReceiveBuf(stream,len)对不对?
我曾这样做过,可是出现了异常!
 
>不需要再通过buffer传给stream?
不可以
>即Socket.ReceiveBuf(stream,len)对不?我曾这样做过,可是出现了异常!
不对。
ReceiveBuf的第一个参数为缓冲区,
Socket.ReceiveBuf(b,len);
Stream是类,也是指针,完全两回事
 
用nmstrm即可。看demo。
 
JPEGImage := TJPEGImage.Create;
JPEGImage.Assign(BitmapImage);
JPEGImage.CompressionQuality := 100; { Best quality }

{ Create a stream connected to stdout }
HandleStr := THandleStream.Create(GetStdHandle(STD_OUTPUT_HANDLE));

{ Create a memory stream to get the contents of the JPEG file. This is
only to determine the size of the JPEG. If I knew how to get the
size of the JPEG right from the JPEGImage, then the saving to the
memory stream step can be avoided }
MemStream := TMemoryStream.Create;
JPEGImage.SaveToStream(MemStream);

{ Write out the content type to stdout }
WriteLn('Content-type: image/jpeg');
WriteLn('Content-length: ' + IntToStr(MemStream.Size));
WriteLn;
Flush(Output);

{ Write the contents of the memory stream (i.e. the JPEG image) to stdout }
MemStream.SaveToStream(HandleStr);

{ Free everything }
HandleStr.Free;
MemStream.Free;
BitmapImage.Free;
JPEGImage.Free;
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
1K
import
I
后退
顶部