关于Indy的TidTCPServer连接问题 |
尚未結案
|
breathsoft
一般會員 發表:1 回覆:3 積分:0 註冊:2008-02-24 發送簡訊給我 |
|
breathsoft
一般會員 發表:1 回覆:3 積分:0 註冊:2008-02-24 發送簡訊給我 |
connect 代码如下:
procedure TfrmMain.KytServerConnect(AThread: TIdPeerThread); var Client: PClient; begin try MemLog.Lines.Add(FormatDateTime('yyyy-mm-dd hh:mm:ss',now) ' ' AThread.Connection.Socket.Binding.PeerIP ':' IntToStr(AThread.Connection.Socket.Binding.PeerPort) ' 客户端连接'); Client := new( PClient ); Client.UserName := ''; Client.RealName := ''; Client.PassWord := ''; Client.IP := AThread.Connection.Socket.Binding.PeerIP; Client.Port := AThread.Connection.Socket.Binding.PeerPort; Client.LinkTime := now; //监控周期 Client.LoginTime := now; Client.ActiveTime := now; Client.Status := '未登录'; Client.Login := false; Client.Mac := AThread.Connection.Socket.SocksInfo.Username; Client.Thread := AThread; AThread.Data := TObject(Client); //指到 athread的指针中 except on E:exception do begin if strServ_Error='是' then MemLog.Lines.Add(FormatDateTime('yyyy-mm-dd hh:mm:ss',now) ' ' AThread.Connection.Socket.Binding.PeerIP ':' IntToStr(AThread.Connection.Socket.Binding.PeerPort) ' 连接错误:' E.Message); AThread.Terminate; end; end; try KytClients.LockList.Add(Client); clientNumber := KytClients.LockList.Count; finally KytClients.UnlockList; end; end; Disconnect代码如下: procedure TfrmMain.KytServerDisconnect(AThread: TIdPeerThread); var Client:PClient; begin //KytServer.Threads.LockList; try Client := PClient(AThread.Data); if not isvalidmemptr(Client) or (Client=nil) then exit; if Client.Login then MemLog.Lines.Add(FormatDateTime('yyyy-mm-dd hh:mm:ss',now) ' ' Client.UserName ' 断开连接') else MemLog.Lines.Add(FormatDateTime('yyyy-mm-dd hh:mm:ss',now) ' ' Client.IP ':' IntToStr(Client.Port) ' 断开连接'); AThread.Data := nil; if not AThread.Terminated then AThread.Terminate; if not isvalidmemptr(Client) or (Client=nil) then exit; FreeMem(Client); except on E:Exception do begin if strServ_Error='是' then MemLog.Lines.Add(FormatDateTime('yyyy-mm-dd hh:mm:ss',now) ' ' AThread.Connection.Socket.Binding.PeerIP ':' IntToStr(AThread.Connection.Socket.Binding.PeerPort) ' 断开错误:' E.Message); if not AThread.Terminated then AThread.Terminate; end; end; try KytClients.LockList.Remove(Client); clientNumber := KytClients.lockList.Count; finally KytClients.UnlockList; end; end;
------
因为专业,所以安全; 因为安全,所以成功。 |
breathsoft
一般會員 發表:1 回覆:3 積分:0 註冊:2008-02-24 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |