读书人

TCP包是一个包含动态数组的的记录结构

发布时间: 2012-09-27 11:11:17 作者: rapoo

TCP包是一个包含动态数组的的记录结构,这种数据包怎么发送呀!
//图片的相关信息项
TInfomationData = packed record
TakeTime: string[28];//拍照时间
TakeAdr: string[50];//拍照地点
TakePixel: string[10];//拍照像素
ImageName: string[50]; //图片名
end;
PInfomationData = ^TInfomationData;

//TCP数据包
TTCPData = packed record
tdType: Word;//包类型
tdLength: Cardinal;//数据项长度(tdInfo + tdPicture )
tdInfo: TInfomationData;
tdPicture: array of byte;//存放图片数据
end;
PTCPData = ^ TTCPData;

使用Delphi7中的Indy 9.0(TIdTCPClient TIdTCPServer)
客户端主体代码:
Var
TCPData: TTCPData;
InfoData: TInfomationData;
……
Begin
给InfoData各成员赋了值后
FS := TFileStream.Create(PathFileName, fmOpenRead or fmShareExclusive);
TCPData. tdType := 1100;
TCPData. tdLength := Sizeof(InfoData) + FS.Size;
TCPData. tdInfo := InfoData;

SetLength(TCPData. tdPicture, FS.Size);
FS.Position := 0;
FS.ReadBuffer(TCPData. tdPicture [0], FS.Size);//这步可以成功将图片数据读进tdPicture

Client.WriteBuffer(TLVData, SizeOf(TLVData), true);
//这样发送只把tdPicture的地址发送了过去,并没把其中的图片数据发送过去
End;
请问各位大侠,这种情况应该如何才能成功地将图片数据连同TCP数据包一起发送成功呢?


[解决办法]
发送的数据包
是不是完整的。。


[解决办法]
TCP数据包包含图片信息tdInfo: PInfomationData; 只发送TCP数据包就是了

读书人网 >.NET

热点推荐