我都是按经典教材上说的来做的,可是为什么我做出来的聊天工具只能通过本机测试,却不能和其它机子聊天呢,哪位达人来指点一下下啊!!代码如下:
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Sockets;type
  TForm1 = class(TForm)
    TcpClient1: TTcpClient;
    TcpServer1: TTcpServer;
    edtremotehost: TEdit;
    edtremoteport: TEdit;
    edtlocalport: TEdit;
    btnactivateserver: TButton;
    btnsend: TButton;
    Memrecv: TMemo;
    memsend: TMemo;
    procedure tcpserver1accept(sender: tobject;clientsocket: tcustomipclient);
    procedure btnsendClick(Sender: TObject);
    procedure btnactivateserverClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;  tclientdatathread=class(tthread)
  private
  public
       listbuffer:tstringlist;
     targetlist:tstrings;
     procedure synchadddatatocontrol;
     constructor create(createsuspended:boolean);
     procedure execute;override;
     procedure terminate;
     end;var
  Form1: TForm1;implementation{$R *.dfm}
constructor tclientdatathread.create(createsuspended:boolean);
begin
   inherited create(createsuspended);
   freeonterminate:=true;
   listbuffer:=tstringlist.Create;
end;procedure tclientdatathread.terminate;
begin
   listbuffer.Free;
   inherited;
end;procedure tclientdatathread.execute;
begin
   synchronize(synchadddatatocontrol);
end;procedure tclientdatathread.synchadddatatocontrol;
begin
  targetlist.AddStrings(listbuffer);
end;procedure TForm1.btnactivateserverClick(Sender: TObject);
begin
    tcpserver1.LocalPort:=edtlocalport.Text;
    tcpserver1.Active:=true;
end;procedure TForm1.btnsendClick(Sender: TObject);
var
  l:integer;
begin
   tcpclient1.RemoteHost:=edtremotehost.Text;
   tcpclient1.RemotePort:=edtremoteport.Text;
   try
      if tcpclient1.Connect then
        for l:=0 to memsend.Lines.Count-1 do
        begin
        tcpclient1.Sendln(memsend.Lines[l]);
        tcpserver1.Open;
        end;
     finally
      tcpclient1.Disconnect;
      end;
end;procedure tform1.tcpserver1accept(sender: tobject;clientsocket: tcustomipclient);
var
  s:string;
  datathread:tclientdatathread;
begin
  datathread:=tclientdatathread.create(true);
  datathread.targetlist:=memrecv.Lines;
  datathread.listbuffer.Add('***connection accepted***');
  datathread.listbuffer.Add('remote host: '+clientsocket.LookupHostName(clientsocket.RemoteHost)+'('+clientsocket.RemoteHost+')');
  datathread.listbuffer.Add('=====begin message=====');
  s:=clientsocket.Receiveln;
  while s<>'' do
  begin
  datathread.listbuffer.Add(s);
  s:=clientsocket.Receiveln;
  end;
  datathread.listbuffer.Add('===== end of message =====');
  datathread.Resume;
end;
end.