客户端和服务器连接的时候就出现以上问题。。在本机上的客户端连接本机运行的服务器没有问题,但是在其他机器上的客户端连接就出问题了。。
 
客户端unit UnitLogin;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,HttpApp,inifiles, ScktComp, IdBaseComponent,
  IdComponent, IdIPWatch, Menus, Sockets, IdTCPConnection, IdTCPClient,
  ExtCtrls, IdAntiFreezeBase, IdAntiFreeze;
type
  User_Info=record
  User_Number:String[8];//登录的JJ号
  User_Password:String[12];//登录密码
  User_IpAddress:String[15];//用户的IP地址
end;
type
  TFormlogin = class(TForm)
    LabelLoginName: TLabel;
    LabelPassword: TLabel;
    EditPassword: TEdit;
    ButtonLogin: TButton;
    ComboBoxLoginName: TComboBox;
    ButtonSet: TButton;
    Button1: TButton;
    IdIPWatch1: TIdIPWatch;
    IdTCPClient1: TIdTCPClient;
    Timer1: TTimer;
    IdAntiFreeze1: TIdAntiFreeze;
    procedure ComboBoxLoginNameKeyPress(Sender: TObject; var Key: Char);
    procedure EditPasswordKeyPress(Sender: TObject; var Key: Char);
    procedure ButtonLoginClick(Sender: TObject);
    procedure ButtonSetClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure IdTCPClient1Disconnected(Sender: TObject);
    procedure IdTCPClient1Connected(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Formlogin: TFormlogin;
  info:user_info;
  Str:String;
  td:DWORD;
  doConnect:Boolean;
implementationuses UnitSet, UnitChat, server;{$R *.dfm}
{procedure readthread;
var
  s:String;
begin
  while doConnect do
    begin
      s:=FormLogin.IdTCPClient1.ReadLn;
      sleep(100);
    end;
end;}procedure TFormlogin.ComboBoxLoginNameKeyPress(Sender: TObject;
  var Key: Char);
begin
  case Key of
    '0'..'9',#8:;
    #27:ComboBoxLoginName.Text:='';
    #13:self.EditPassword.SetFocus;
    else Key:=#0;
  end;
end;procedure TFormlogin.EditPasswordKeyPress(Sender: TObject; var Key: Char);
begin
  case Key of
    '0'..'9','a'..'z','A'..'Z',#8:;
    #27:EditPassword.Text:='';
    #13:self.ButtonLoginClick(self);
    else Key:=#0;
  end;
end;procedure TFormlogin.ButtonLoginClick(Sender: TObject);
var
  recInfo:String;
begin
  //CreateThread(nil,0,@ReadThread,nil,0,td);
  if self.IdTCPClient1.Connected then
    idtcpclient1.Disconnect;
  if (self.ComboBoxLoginName.Text<>'') and (self.EditPassword.Text<>'') then
    begin
      IdTCPClient1.Host:=intToStr(ini.ReadInteger('config','ip0',192))+'.'+intToStr(ini.ReadInteger('config','ip1',168))+'.'+intToStr(ini.ReadInteger('config','ip2',0))+'.'+intToStr(ini.ReadInteger('config','ip3',87));
      IdTCPClient1.Port:=8088;
      IdTCPClient1.Connect;
      info.User_Number:=comboboxLoginName.Text;
      info.User_Password:=EditPassword.Text;
      info.User_IpAddress:=IdIPWatch1.LocalIP;
      IdTCPClient1.WriteBuffer(info,sizeof(info),true);
      recinfo:=IdTCPClient1.ReadLn;
      if recInfo='ls' then
        begin
          showmessage('登陆成功');
          self.Hide;
          formchat.Show;
        end
      else
        begin
          showmessage('登录失败');
          idtcpclient1.Disconnect;
        end;
    end
  else
    begin
      showmessage('用户名或密码不能为空');
    end;
end;
procedure TFormlogin.ButtonSetClick(Sender: TObject);begin
  formSet.Show;
  ButtonSet.Enabled:=false;
end;procedure TFormlogin.FormShow(Sender: TObject);
begin
  ComboboxLoginName.SetFocus();
end;procedure TFormlogin.FormCreate(Sender: TObject);
begin
  showmessage('本机的IP地址为'+self.IdIPWatch1.LocalIP);
  inifileName:=Extractfilepath(application.ExeName)+'ip.ini';
  ini:=TiniFile.Create(iniFileName);
end;procedure TFormlogin.Button1Click(Sender: TObject);
begin
  formServer.show;
end;
procedure TFormlogin.IdTCPClient1Disconnected(Sender: TObject);
begin
  formserver.StatusBar1.Panels[0].Text:='客户端'+IdIPWatch1.LocalIP+'断开连接';
end;procedure TFormlogin.IdTCPClient1Connected(Sender: TObject);
begin
  formserver.StatusBar1.Panels[0].Text:='客户端'+IdIPWatch1.LocalIP+'已经连接';
end;end.
--------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------
-----------------------------------------服务器端-------------------------------------------------------------
unit server;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, ScktComp, ToolWin, ComCtrls, StdCtrls, FileCtrl, Menus,
  DB, ADODB, IdBaseComponent, IdComponent, IdTCPServer;const
  CMax=10;type
  User_Info1=record
  User_Number:String[8];//登录的JJ号
  User_Password:String[12];//登录密码
  User_IpAddress:String[15];//用户的IP地址
end;type
  TformServer = class(TForm)
    ControlBar1: TControlBar;
    ToolBar1: TToolBar;
    ButtonConnect: TButton;
    ButtonBreak: TButton;
    ButtonClose: TButton;
    StatusBar1: TStatusBar;
    Memo1: TMemo;
    Edit1: TEdit;
    ListBox1: TListBox;
    ADOConnection1: TADOConnection;
    ADOQuery1: TADOQuery;
    IdTCPServer1: TIdTCPServer;    procedure ButtonCloseClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure IdTCPServer1Connect(AThread: TIdPeerThread);
    procedure ButtonConnectClick(Sender: TObject);
    procedure IdTCPServer1Exception(AThread: TIdPeerThread;
      AException: Exception);
    procedure IdTCPServer1Status(ASender: TObject;
      const AStatus: TIdStatus; const AStatusText: String);
    procedure IdTCPServer1Execute(AThread: TIdPeerThread);
    procedure ButtonBreakClick(Sender: TObject);  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  formServer: TformServer;
  info1:User_Info1;
implementationuses UnitLogin;{$R *.dfm}procedure TformServer.ButtonCloseClick(Sender: TObject);
begin
  close;
  IdTCPServer1.Destroy;
  self.IdTCPServer1.Active:=false;
  self.StatusBar1.Panels[0].Text:='服务器已关闭';
end;procedure TformServer.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  self.ADOQuery1.Free;
  self.ADOConnection1.Free;
  IdTCPServer1.Destroy;
  if formlogin.IdTCPClient1.connected then
    formLogin.IdTCPClient1.Disconnect;
end;
procedure TformServer.IdTCPServer1Connect(AThread: TIdPeerThread);
begin
  Athread.Connection.ReadBuffer(info1,sizeof(info1));
  self.ADOQuery1.SQL.Clear;
  self.ADOQuery1.SQL.Add('select * from users where user_Number='+info1.User_Number+' and user_password="'+info1.User_Password+'"');
  self.ADOQuery1.Open;
   if not ADOQuery1.IsEmpty then
     begin
       Athread.Connection.WriteLn('ls');
    end
   else
     begin
       athread.Connection.WriteLn('lf');
     end;
    ADOQuery1.Close;end;procedure TformServer.ButtonConnectClick(Sender: TObject);
begin
  IdTCPServer1.Active:=true;
  self.IdTCPServer1.DefaultPort:=8088;
  self.StatusBar1.Panels[0].Text:='服务器已开启';
end;procedure TformServer.IdTCPServer1Exception(AThread: TIdPeerThread;
  AException: Exception);
begin
  showmessage(Athread.Connection.Socket.Binding.PeerIP+Aexception.Message);
end;procedure TformServer.IdTCPServer1Status(ASender: TObject;
  const AStatus: TIdStatus; const AStatusText: String);
begin
  showmessage('这是状态选项里的文本'+AStatusText);
end;procedure TformServer.IdTCPServer1Execute(AThread: TIdPeerThread);
begin
 // Athread.FreeOnTerminate:=true;end;procedure TformServer.ButtonBreakClick(Sender: TObject);
begin
  self.IdTCPServer1.Active:=false;
  self.StatusBar1.Panels[0].Text:='服务器已关闭';
end;end.