同时传图片与字符到服务端(50分)

  • 主题发起人 主题发起人 rgx750814
  • 开始时间 开始时间
R

rgx750814

Unregistered / Unconfirmed
GUEST, unregistred user!
我想把一个图片和字符同时传到服务端,在服务端把图片保存到一个指定的目录下,把字符插入数据库中.
我现在是定义了一个结构,把图片保存成一个文件流.
type
clitsend = packed record
ip: string[20];
//ip地址
mac: string[20];
//mac地址
imge:TFileStream;
//这个是传图片的.
end;
客户端:可以发送到服务端,服端可以接收到发来的信息.
var csend:clitsend;
Buf: TBytes;
begin

csend.
ip := ip;
csend.
mac := mac;

csend.
imge:= TFileStream.Create('C:/A6/ID371425197412102894.jpg', fmShareDenyNone);
Buf := rawtobytes(csend, sizeof(csend));
IdTCPClient.IOHandler.Write(buf);
end;
服务端接收:
procedure TForm1.ssctClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
Vclit: clitsend;

Buf: TBytes;

t: TFileStream;
jpegs: TJpegImage;
ss,ip,imgdir ,mac:string;
begin

ss := socket.ReceiveText;
BytesToRaw(TBytes(ss), Vclit, SizeOf(Vclit));
com_code := Vclit.com_code;
ip := Vclit.ip;
mac := Vclit.mac;
imgdir := 'f:/img/'123.jpg';
jpegs := TJpegImage.Create;
t := TFileStream.Create(imgdir, fmCreate);
t.CopyFrom(Vclit.imge, Vclit.imge.Size);
end;
在服务端,ip ,mac都传输的正确,但是执行 t.CopyFrom(Vclit.imge, Vclit.imge.Size);时就报错.请问这是为什么
 
type
PPackageHeader = ^TPackageHeader
TPackageHeader = record
PictureBytes:Cardinal;
StrLength:Cardinal;
end;
以Bitmap为例
function BuildPackage(Picture:TBitmap;Str:string;out Buf:Pointer):Integer;
var
bmpStream:TMemoryStream;
begin
bmpStream:=TMemoryStream.Create;
Picture.SaveToStream(bmpStream);
GetMem(Buf,SizeOf(TPackageHeader)+bmpStream.Size+Length(Str)*SizeOf(Char));
PPackageHeader(Buf).PictureBytes:=bmpStream.Size;
PPackageHeader(Buf).StrLength:=Length(Str)*SizeOf(Char);
bmpStream.Position:=0;
bmpStream.Read(Pointer(Integer(Buf)+SizeOf(TPackageHeader))^,bmpStream.Size);
Move(Str[1],Pointer(Integer(Buf)+SizeOf(TPackageHeader)+bmpStream.Size)^,Length(Str)*SizeOf(Char));
bmpStream.Free;
end;
 
地质灾害 你好,
PictureBytes这个是不是放的图片
你这个怎么发送的,服务端又是怎么接收的
 
后退
顶部