A
andywang
Unregistered / Unconfirmed
GUEST, unregistred user!
各位朋友:
我有一段代码是这样实现的。
//首先是定义一个协议
TTransRec = record
TRType: (ttConnected, ttData, ttDataEnd, ttDisconnect);
DataSize: Int64;
Data: Pointer;
end;
在客户端
点击连接按钮时:idtcpclient.connect;
点击发送文件按钮时:
var
FFileStream: TFileStream;
SendBuf: TTransRec;
pPointer: Pointer;
sFileName: string;
begin
try
sFileName := 'D:/1.txt';
//这里为了简单,直接指定了一个文件,它的内容是:123456
FFileStream := TFileStream.Create(FFileDir, fmOpenRead);
GetMem(tmpPointer, FFileStream.Size);
FFileStream.ReadBuffer(tmpPointer^, FFileStream.Size);
SendBuf.TransType := ttData;
SendBuf.DataSize := FFileStream.Size;
SendBuf.Data := tmpPointer;
IdTCPClient.WriteBuffer(SendBuf, SizeOf(SendBuf));
finally
FreeAndNil(FFileStream);
FreeMem(tmpPointer);
end;
end;
在服务器端:
idTCPServer的OnExecute事件中写:
var
RecieveBuf: TTransRec;
pPointer: Pointer;
FFileStream: TFileStream;
begin
try
AThread.Connection.ReadBuffer(RecieveBuf, SizeOf(RecieveBuf));
//这里的SizeOf(RecieveBuf)
if RecieveBuf.TRType = ttData then
begin
FFileStream := TFileStream.Create('E:/1.txt', fmOpenWrite);
pPointer := RecieveBuf.Data;
FFileStream.WriteBuffer(pPointer^, RecieveBuf.DataSize);
//这里的SizeOf(pPointer)
end;
finally
FreeAndNil(FFileStream);
end;
end;
但是我在运行时,保存的文件内容跟发送的文件内容不一致。
哪位兄弟有这方面的Demo,请发一份给我,或是指点一二,小弟感激不尽。
我有一段代码是这样实现的。
//首先是定义一个协议
TTransRec = record
TRType: (ttConnected, ttData, ttDataEnd, ttDisconnect);
DataSize: Int64;
Data: Pointer;
end;
在客户端
点击连接按钮时:idtcpclient.connect;
点击发送文件按钮时:
var
FFileStream: TFileStream;
SendBuf: TTransRec;
pPointer: Pointer;
sFileName: string;
begin
try
sFileName := 'D:/1.txt';
//这里为了简单,直接指定了一个文件,它的内容是:123456
FFileStream := TFileStream.Create(FFileDir, fmOpenRead);
GetMem(tmpPointer, FFileStream.Size);
FFileStream.ReadBuffer(tmpPointer^, FFileStream.Size);
SendBuf.TransType := ttData;
SendBuf.DataSize := FFileStream.Size;
SendBuf.Data := tmpPointer;
IdTCPClient.WriteBuffer(SendBuf, SizeOf(SendBuf));
finally
FreeAndNil(FFileStream);
FreeMem(tmpPointer);
end;
end;
在服务器端:
idTCPServer的OnExecute事件中写:
var
RecieveBuf: TTransRec;
pPointer: Pointer;
FFileStream: TFileStream;
begin
try
AThread.Connection.ReadBuffer(RecieveBuf, SizeOf(RecieveBuf));
//这里的SizeOf(RecieveBuf)
if RecieveBuf.TRType = ttData then
begin
FFileStream := TFileStream.Create('E:/1.txt', fmOpenWrite);
pPointer := RecieveBuf.Data;
FFileStream.WriteBuffer(pPointer^, RecieveBuf.DataSize);
//这里的SizeOf(pPointer)
end;
finally
FreeAndNil(FFileStream);
end;
end;
但是我在运行时,保存的文件内容跟发送的文件内容不一致。
哪位兄弟有这方面的Demo,请发一份给我,或是指点一二,小弟感激不尽。