各位大哥小弟想请问一下多线程的问题
我要同时接收别人发来的多个文件该怎么做啊?
用indy idtcpserver
我要同时接收别人发来的多个文件该怎么做啊?
用indy idtcpserver
解决方案 »
- 散分!
- delphi中的问题
- delphi有没有一个透明容器,我想在里面装上十几个LABEL,用来做成在窗体上从下到上的滚动字幕,或有没有好的办法实现滚动字幕?
- DevExpress ExpressBar 5.1
- 大家给讲一下form.show和from.showmodal的区别,什么时候用show什么时候showmodal?
- 麻烦各位告诉告诉俺Window Stations and Desktops里的一大堆函数都是干什么用的,谢谢。
- 一个小小的问题~
- COM/DCOM 无法连接应用程序服务器
- 这个软件到底如何控制我访问INTERNET??????????????
- 大家快快来给Delphi6抓虫
- 痔疮怎么治?
- 想在家访问公司内部局域网内sql数据库
接受部分(有个用户和密码check,你取消就可以)
procedure TTCP_Server.IdTCPServerExecute(AThread: TIdPeerThread);
var
FStream : TFileStream;
FileName : String;
CmdStr : String;
begin
CmdStr :=AThread.Connection.ReadLn();
if CompareStr(Copy(CmdStr,1,6),'<SEND>')=0 then
begin //1
Delete(CmdStr,1,6);
Cmd := '上传文件';
FileName := CmdStr;
if FileExists(ExtractFilePath(Application.ExeName)+FileName) then
DeleteFile(ExtractFilePath(Application.ExeName)+FileName);
try
FStream := TFileStream.Create(ExtractFilePath(Application.ExeName)+FileName,FmCreate);
AThread.Connection.ReadStream(FStream,2048,true);
Finally
FStream.Free;
AThread.Connection.Disconnect;
end;
end //1
else if CompareStr(Copy(CmdStr,1,6),'<AGET>')=0 then
begin //2
Delete(CmdStr,1,6);
Cmd := '下载文件';
FileName := CmdStr;
if FileExists(ExtractFilePath(Application.ExeName)+FileName) then
begin
try
FStream := TFileStream.Create(ExtractFilePath(Application.ExeName)+FileName,FmOpenRead);
AThread.Connection.WriteStream(FStream,True,False);
Finally
FStream.Free;
AThread.Connection.Disconnect;
end;
end
else
begin
AThread.Connection.WriteLn('Failed');
AThread.Connection.Disconnect;
end;
end //2
else if CompareStr(Copy(CmdStr,1,6),'<USER>')=0 then
begin //3
Delete(CmdStr,1,6);
User := UpperCase(Trim(DecryptString(CmdStr,20504))); //CmdStr;
if CompareStr(User,'XDM')=0 then
begin
Memo1.Lines.Add('User: '+User);
CmdStr :='';
end
else
begin
Memo1.Lines.Add('User: '+User+' 非法登陆,已关闭连接');
CmdStr := '';
AThread.Connection.WriteLn('<Failed>');
AThread.Connection.Disconnect;
end;
end //3
else if CompareStr(Copy(CmdStr,1,6),'<PASS>')=0 then
begin //4
Delete(CmdStr,1,6);
Password := DecryptString(CmdStr,20504); //CmdStr;
if CompareStr(Password,'123abc')=0 then
begin
Memo1.Lines.Add('Login..........Accepted');
Memo1.Lines.Add('Connected......'+DateTimeToStr(Now));
CmdStr := '';
AThread.Connection.WriteLn('<Accepted>');
end
else
begin
Memo1.Lines.Add('Password Wrong...Login Failure');
AThread.Connection.WriteLn('<Failed>');
CmdStr :='';
AThread.Connection.Disconnect;
end;
end; //4
end;主要发送部分
procedure TTCP_Client.BtnSendClick(Sender: TObject);
var
FStream : TFileStream;
begin
if IdTcpClient.Connected then begin
IdTcpClient.WriteLn('<SEND>'+ExtractFileName(FileName));
if FileName = '' then
MessageBox(Handle,'没有选择文件','Error',MB_OK)
else begin
try
FStream := TFileStream.Create(FileName,FmOpenRead);
FStream.Position := 0;
FStream.Seek(0,0);
IdTcpClient.WriteStream(FStream,true,false);
Finally
FStream.Free;
IdTcpClient.Disconnect;
end;
Memo1.Lines.Add('Transferred OK');
end;
end
else
begin
MessageBox(Handle,'没有连接服务器','Error',MB_Ok);
end;
end;
但是他在AThread只是处理一个线程的吧
我现在是发送端发给客户端我选择一个文件正在接收
我再选择另一个的时候
他就会提示already connect