文件传输,如何能多个client同时接收? ( 积分: 100 )

  • 主题发起人 主题发起人 赛特
  • 开始时间 开始时间

赛特

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同时接收该怎么办呢?
 
不是有OnWork。。。么?你试过没?
 
能说具体些吗,我想用进度条显示,谢谢
 
你先发一个文件长度,然后再接收的时候触发一个线程,该线程实时检测SendFile的大小,这样不就行了。
 
但tcpserver没有onwork,怎么办呢?说具体些,谢谢
 
那就需要同步线程了,,我也问紧同步的问题,200分没人理
 
而且,发送端是写在
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;
当有client连接时,server应该是为每个连接建立一个线程对象。如果是这样,为什么不能多个client端同时接收文件呢?难道这就是因为,传说中的“阻塞式”,同时只能一个线程进行处理吗?如果真是这样,那我要实现可以多client同时接收该怎么办呢?
 
就是在onwork里面啊!那个integer就是字节数
 
该用到线程了吧.
 
idtcpserver的execute本来都是线程机制,但是又是阻塞式,同一时间就只能一个client接收。如何才能同时多个client接收啊??
 
多个客户端接收时,可能出现第一个完成,或两个都死机
没找出来原因,发送字符串和格式数据都行,就是大文件不行,等待中
 
而且,我在用 IDTCPClient 和 IDTCPServer 通信时,如果client在通信进行中突然退出,server方就会报:Exception EOSError...,我也在TCPServerException里AException := nil了,但是没用;用try except 也没用。如果是server方在通信进行时退出,也不好控制。改怎么办呢?
 
楼主看看这个,多启动几个client,然后选中他们,给他们发文件,完全可以并行啊,没阻塞的情况:
http://www.2ccc.com/article.asp?articleid=3894
 
to zqw0117:
打不开呀?
 
加QQ群:11178110
群共享中可下载:ServerSendFile2Client.rar
 
多人接受答案了。
 
后退
顶部