赛
赛特
Unregistered / Unconfirmed
GUEST, unregistred user!
我是用的 indy ,传送的代码是这样的:
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
SendFile : TFileStream;
begin
with AThread.Connection do
begin
WriteLn(SendFileName);
SendFile := TFileStream.Create(SendFileName, fmOpenRead);
WriteStream(SendFile);
Disconnect;
SendFile.Free;
end;
end;
接收:
With TCPClient do
begin
while Connected do
begin
try
RecevFileName := ReadLn;
ReadStream(ReadFile, -1, True);
ReadFile.Seek(0, soFromBeginning);
ReadFile.SaveToFile(RecevFileName);
finally
Disconnect;
end;
end;
end;
当有client连接时,server应该是为每个连接建立一个线程对象。如果是这样,为什么不能多个client端同时接收文件呢?难道这就是因为,传说中的“阻塞式”,同时只能一个线程进行处理吗?那还用线程来做什么呢?如果真是这样,那我要实现可以多client同时接收该怎么办呢?
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
SendFile : TFileStream;
begin
with AThread.Connection do
begin
WriteLn(SendFileName);
SendFile := TFileStream.Create(SendFileName, fmOpenRead);
WriteStream(SendFile);
Disconnect;
SendFile.Free;
end;
end;
接收:
With TCPClient do
begin
while Connected do
begin
try
RecevFileName := ReadLn;
ReadStream(ReadFile, -1, True);
ReadFile.Seek(0, soFromBeginning);
ReadFile.SaveToFile(RecevFileName);
finally
Disconnect;
end;
end;
end;
当有client连接时,server应该是为每个连接建立一个线程对象。如果是这样,为什么不能多个client端同时接收文件呢?难道这就是因为,传说中的“阻塞式”,同时只能一个线程进行处理吗?那还用线程来做什么呢?如果真是这样,那我要实现可以多client同时接收该怎么办呢?