//接收端
procedure TClientThread.Execute;
var
ReceiveBuffer: array[0..4095] of Char;
SocketStream: TWinSocketStream;
BytesRead: Integer;
begin
Form1.ClientSocket1.Socket.ReceiveBuf(len, sizeof(len));
SocketStream := TWinSocketStream.Create(Form1.ClientSocket1.Socket, 600000);
F := TFileStream.Create('c:\abc1.pdf', fmCreate);
f.Position := 0;
try
FillChar(ReceiveBuffer, 4096, 0);
if SocketStream.WaitForData(5000) then
begin
repeat
BytesRead := SocketStream.Read(ReceiveBuffer, SizeOf(ReceiveBuffer));
if BytesRead <> 0 then
F.WriteBuffer(ReceiveBuffer, BytesRead)
else
break;
synchronize(finishedtime);
until not SocketStream.WaitForData(20000);
end;
finally
Form1.ClientSocket1.Close;
SocketStream.Free;
f.Free;
end;
end;//发送端
procedure TForm1.ServerSocket1GetThread(Sender: TObject;
ClientSocket: TServerClientWinSocket; var SocketThread: TServerClientThread);
begin
SocketThread := TClientThread.Create(true, ClientSocket);
TClientThread(SocketThread).filename := edit1.Text;
SocketThread.Resume;
end;procedure TClientThread.ClientExecute;
var
SocketStream: TWinSocketStream;
BytesRead: Integer;
F: TFileStream;
begin
try
SocketStream := TWinSocketStream.Create(ClientSocket, 60000);
F := TFileStream.Create(ffilename, fmShareDenyWrite);
SocketStream.Position := 0;
f.Position := 0;
try
SocketStream.CopyFrom(f, 0);
finally
SocketStream.Free;
ClientSocket.Close;
f.Free;
end;
except
end;
end;
现在的问题: 发送接收一切正常. 但为什么不管发什么文件/多大的文件,都少了开头的8个字节. 其余内容完全正常??
试过十几K~十几M的文件都只有文件头没了8个字节.不解,望哪位大哥,帮帮小弟.
procedure TClientThread.Execute;
var
ReceiveBuffer: array[0..4095] of Char;
SocketStream: TWinSocketStream;
BytesRead: Integer;
begin
Form1.ClientSocket1.Socket.ReceiveBuf(len, sizeof(len));
SocketStream := TWinSocketStream.Create(Form1.ClientSocket1.Socket, 600000);
F := TFileStream.Create('c:\abc1.pdf', fmCreate);
f.Position := 0;
try
FillChar(ReceiveBuffer, 4096, 0);
if SocketStream.WaitForData(5000) then
begin
repeat
BytesRead := SocketStream.Read(ReceiveBuffer, SizeOf(ReceiveBuffer));
if BytesRead <> 0 then
F.WriteBuffer(ReceiveBuffer, BytesRead)
else
break;
synchronize(finishedtime);
until not SocketStream.WaitForData(20000);
end;
finally
Form1.ClientSocket1.Close;
SocketStream.Free;
f.Free;
end;
end;//发送端
procedure TForm1.ServerSocket1GetThread(Sender: TObject;
ClientSocket: TServerClientWinSocket; var SocketThread: TServerClientThread);
begin
SocketThread := TClientThread.Create(true, ClientSocket);
TClientThread(SocketThread).filename := edit1.Text;
SocketThread.Resume;
end;procedure TClientThread.ClientExecute;
var
SocketStream: TWinSocketStream;
BytesRead: Integer;
F: TFileStream;
begin
try
SocketStream := TWinSocketStream.Create(ClientSocket, 60000);
F := TFileStream.Create(ffilename, fmShareDenyWrite);
SocketStream.Position := 0;
f.Position := 0;
try
SocketStream.CopyFrom(f, 0);
finally
SocketStream.Free;
ClientSocket.Close;
f.Free;
end;
except
end;
end;
现在的问题: 发送接收一切正常. 但为什么不管发什么文件/多大的文件,都少了开头的8个字节. 其余内容完全正常??
试过十几K~十几M的文件都只有文件头没了8个字节.不解,望哪位大哥,帮帮小弟.
那后面ReceiveBuf自然会少了这几个字节。
文件长度
文件内容
这种方式来做.
顺序接收,再savetofile就ok了
少字节,应是有内容未收全.
发送的地方加个:ClientSocket.Socket.WriteBuf(len,sizeof(len));
一言惊醒梦中人,怎么就没想到 int64 就是8位的呢.... 太粗心大意了昨天做的测试,忘记注释掉了. 想了一个晚上都不知道哪出了问题.