如何使用Socket实现点对点文件传输
//SEND 数据
procedure TChatForm.Button1Click(Sender: TObject);
var
SendFile:TMemoryStream;
SendBuf:Pointer;
begin
SendFile:=TMemoryStream.Create;
SendFile.LoadFromFile('1.jpg');
SendBuf:=nil;
try
GetMem(SendBuf,SEND_BUFF_SIZE+1);
while SendFile.Position+1+SEND_BUFF_SIZE<sendFile.Size do
begin
SendFile.Read(SendBuf^,SEND_BUFF_SIZE);
serverSocket.Socket.Connections[0].SendBuf(SendBuf^,SEND_BUFF_SIZE);
end;
SendFile.Read(SendBuf^,SendFile.Size-SendFile.Position-1);
serverSocket.Socket.Connections[0].SendBuf(SendBuf^,SendFile.Size-SendFile.Position-1);
finally
FreeMem(SendBuf,SEND_BUFF_SIZE+1);
end;
end;
procedure TChatForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
RecFile.SaveToFile('test.jpg');
end;
//接受数据
procedure TChatForm.ClientSocketRead(Sender: TObject;
Socket: TCustomWinSocket);
var
RecBuf:Pointer;
i:Integer;
begin
while true do
begin
GetMem(RecBuf,GET_BUFF_SIZE+1);
//Memo2.Lines.Add(Socket.ReceiveText);
i:=Socket.ReceiveBuf(RecBuf^,GET_BUFF_SIZE);
if i=-1 then exit;
RecFile.WriteBuffer(RecBuf^,i);
FreeMem(RecBuf,GET_BUFF_SIZE+1);
end;
end;
为什么我SEND数据为72K 而收到的数据就只有8K,有时接受数据为28K
高手帮帮忙看看,我真的很困惑!