服务器端
procedure TForm1.ServerConnect(AThread: TIdPeerThread);
begin
Athread.Connection.ReadBuffer(KR_login,sizeof(KR_login));
 if (KR_login.Name = '1111') and (KR_login.Password = '1111') then
       memo1.lines.add('登陆成功') else begin
       memo1.lines.add('登陆失败');
       Athread.Connection.Disconnect;
     end;
end;
客户端procedure TForm1.Button1Click(Sender: TObject);
begin
    Client.Host := ServiceIp.Text;
    Client.Port := StrToint(Serviceport.Text);
    Client.Connect(5000);
    Login(Client,L_name.Text,L_pass.Text);
end;procedure TForm1.Login(Icon: TIdTCPClient; Name,password: String);
var
  Lbuff: TKR_login;
begin
    Lbuff.Name := name;
    Lbuff.Password := password;
    Icon.Writebuffer(Lbuff,sizeof(lbuff));
end;现的问题是:在登际不成功的时候,服务器断开与客户端的连结,但是现在发现如果第一次登陆不成功的话,第二次登陆客户端就出现already connected 错误提示,,感觉Athread.Connection.Disconnect;没有执行,但是 memo1.lines.add('登陆失败');正常显示,问下哥哥可哥们,我到底该怎么断开连结

解决方案 »

  1.   

    memo1.lines.add('登陆成功') else begin  改为memo1.lines.add('登陆成功') end else begin
      

  2.   

    To 楼上的: 看清楚了,别乱改。To 楼主: 没看到你Client端是如何显示already connected的?你这个问题应该是Client端的代码有问题引起的。
      

  3.   

    客户端得加上OnDisconnect的处理过程。
      

  4.   

    发送完毕可以直接加一个OnDisconnect
      

  5.   

    服务器端
    procedure TForm1.ServerConnect(AThread: TIdPeerThread);
    begin
    Athread.Connection.ReadBuffer(KR_login,sizeof(KR_login));
     if (KR_login.Name = '1111') and (KR_login.Password = '1111') then
           memo1.lines.add('登陆成功') else begin
           memo1.lines.add('登陆失败');
           AThread.Writeln('failedlogin');   //这里给客户端发个通知消息
           Athread.Connection.Disconnect;
         end;
    end;客户端
    用timer或在线程里:
    var
        s : string;   s := idtcpclient1.readln();
       if  s = 'failedlogin' then
          idtcpclient1.disconnect;大概就这意思,代码自己写。
      

  6.   

    我通常会加上这一段
        if connected then DisConnect;
        Host := '127.0.0.1';        
        Port := 9999;
        Connect;
    这是Indy Demos里的用法。
    这样就没有问题了
      

  7.   

    SORRY,没有解析清楚
    ==========================
    连接前我会加上这一段
    with IdTCPClient1 do
        if connected then DisConnect;
        Host := '127.0.0.1';        
        Port := 9999;
        Connect;
    这是Indy Demos里的用法。
    这样就没有问题了