这是我一个接收文件的程序段,你参考一下。
procedure TSaveFileThread.Execute;
const
BlockLen = 1024 * 4;
var
RecvSocket: TSocket; //用来接收文件的套接字
SockAddr: SockAddr_IN;
iSockAddrLen: integer;
RecvFile: file of byte;
BlockBuf: array [0 .. BlockLen - 1] of byte;
iRecvLen: integer;
begin
iSockAddrLen := SizeOf(SockAddr);
//调用Accept函数来接受客户端的请求
RecvSocket := Accept(ServerSocket, @SockAddr, @iSockAddrLen);
if RecvSocket = INVALID_SOCKET then
raise Exception.Create('接受客户端请求时发生错误!'); //建立文件
AssignFile(RecvFile, FFileName);
ReWrite(RecvFile);
ServerMainForm.FStopTrans := false;
ServerMainForm.FTransing := true; //开始数据的读取
ServerMainForm.StatusBar.SimpleText := '正在接受文件...';
iRecvLen := Recv(RecvSocket, BlockBuf, BlockLen, 0);
while (iRecvLen > 0) and (not ServerMainForm.FStopTrans) do
begin
BlockWrite(RecvFile, BlockBuf[0], iRecvLen);
Application.ProcessMessages;
iRecvLen := Recv(RecvSocket, BlockBuf, BlockLen, 0);
end; //收尾工作
CloseFile(RecvFile);
CloseSocket(RecvSocket);
ServerMainForm.StatusBar.SimpleText := '';
ServerMainForm.FTransing := false;
ServerMainForm.btnReceive.Enabled := true;
ServerMainForm.btnStop.Enabled := false;
if iRecvLen = SOCKET_ERROR then
raise Exception.Create('接收过程中发生错误!')
else
ShowMessage('文件接收完毕!');
end;
procedure TSaveFileThread.Execute;
const
BlockLen = 1024 * 4;
var
RecvSocket: TSocket; //用来接收文件的套接字
SockAddr: SockAddr_IN;
iSockAddrLen: integer;
RecvFile: file of byte;
BlockBuf: array [0 .. BlockLen - 1] of byte;
iRecvLen: integer;
begin
iSockAddrLen := SizeOf(SockAddr);
//调用Accept函数来接受客户端的请求
RecvSocket := Accept(ServerSocket, @SockAddr, @iSockAddrLen);
if RecvSocket = INVALID_SOCKET then
raise Exception.Create('接受客户端请求时发生错误!'); //建立文件
AssignFile(RecvFile, FFileName);
ReWrite(RecvFile);
ServerMainForm.FStopTrans := false;
ServerMainForm.FTransing := true; //开始数据的读取
ServerMainForm.StatusBar.SimpleText := '正在接受文件...';
iRecvLen := Recv(RecvSocket, BlockBuf, BlockLen, 0);
while (iRecvLen > 0) and (not ServerMainForm.FStopTrans) do
begin
BlockWrite(RecvFile, BlockBuf[0], iRecvLen);
Application.ProcessMessages;
iRecvLen := Recv(RecvSocket, BlockBuf, BlockLen, 0);
end; //收尾工作
CloseFile(RecvFile);
CloseSocket(RecvSocket);
ServerMainForm.StatusBar.SimpleText := '';
ServerMainForm.FTransing := false;
ServerMainForm.btnReceive.Enabled := true;
ServerMainForm.btnStop.Enabled := false;
if iRecvLen = SOCKET_ERROR then
raise Exception.Create('接收过程中发生错误!')
else
ShowMessage('文件接收完毕!');
end;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货