我做了一个简单的连接程序,使用ServerSocket和ClientSocket控件,我在局域网、校园网以及同一城市内都可以互连, 但是太远了就显示报错,  是什么地方出了问题,请教各位!!客户端简单连接程序:procedure TfrmClientMain.tbConnectedClick(Sender: TObject);
begin
ClientSocket.Open ;
end;
procedure TfrmClientMain.tbDisconnectedClick(Sender: TObject);
begin
ClientSocket.Close;
end; 
//接受服务器端的回复
procedure TfrmClientMain.ClientSocketRead(Sender: TObject; 
Socket: TCustomWinSocket);
begin
Memo1.Lines.Add(Socket.ReceiveText);
end;
//发送信息到服务器端
procedure TfrmClientMain.tbSendClick(Sender: TObject);
begin
ClientSocket.Socket.SendText(Edit1.Text);
end; 
procedure TfrmClientMain.tbCloseClick(Sender: TObject);
begin 
Close;
end; //已经连接到服务器端 
procedure TfrmClientMain.ClientSocketConnect(Sender: TObject;
Socket: TCustomWinSocket); 
begin 
tbSend.Enabled := True;
tbDisconnected.Enabled :=True; 
btnSend.Enabled := True;
StatusBar.Panels[0].Text := '已经连接到 '+ Socket.RemoteHost ;
end;//正在连接到服务器端
procedure TfrmClientMain.ClientSocketConnecting(Sender: TObject; 
Socket: TCustomWinSocket); 
begin
StatusBar.Panels[0].Text := '正在连接到服务器... ' ; 
end;//当断开与服务器端的连接时发生 
procedure TfrmClientMain.ClientSocketDisconnect(Sender: TObject; 
Socket: TCustomWinSocket);
begin 
tbSend.Enabled := False; 
btnSend.Enabled := False;
tbDisconnected.Enabled := False; 
StatusBar.Panels[0].Text := '已经断开与 '+ Socket.RemoteHost +' 的连接'; 
end;
procedure TfrmClientMain.FormClose(Sender: TObject; 
var Action: TCloseAction); 
begin
ClientSocket.Close ; 
end; 
//当与服务器端的连接发生错误时
procedure TfrmClientMain.ClientSocketError(Sender: TObject; 
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; 
var ErrorCode: Integer);
begin 
StatusBar.Panels[0].Text := '与服务器端的连接发生错误'; 
ErrorCode := 0;
end; 
procedure TfrmClientMain.ToolButton1Click(Sender: TObject);
var
inputstring:string;
begin
inputstring:=inputbox('输入','输入主机ip地址:','') ;
tbConnected.Enabled:=true;
ClientSocket.Host:=inputstring;
end;服务端简单连接程序:
procedure TForm1.Button1Click(Sender: TObject);
begin
serversocket1.Active:=true;
end;procedure TForm1.ServerSocket1Listen(Sender: TObject;
  Socket: TCustomWinSocket);
begin
label1.Caption:='等待客户端连接....................';
end;procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
begin
Memo1.Lines.Add(Socket.ReceiveText);
end;procedure TForm1.Button2Click(Sender: TObject);
begin
serversocket1.Socket.Connections[0].SendText(edit1.Text);
end;procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
label1.Caption:='连接成功';
end;

解决方案 »

  1.   

    比如说一个在北京一个在深圳,都是用宽带或者ADSL上网的。
      

  2.   

    同意 checkyvc6(沉思发挥调整) 的看法
      

  3.   

    连接发生错误时把ErrorCode打印出来才有意义嘛
    双方嗅探一下看socket有没有问题
    另外,连接到内网必须有代理,访问白宫没有问题的话就算正常
      

  4.   

    流星adsl需要端口映射的,否则你连接的不过是adsl而已,根本不能连接到计算机
    你要将服务器的电脑连接的adsl做端口映射,这个资料网上大把。
      

  5.   

    请教一下,那个控件哪找到呀?(ServerSocket和ClientSocket)
      

  6.   

    可能是由于网络阻塞,造成你的数据不连贯,而程序又没有对数据进行容错处理,例如:
    这边发送了 'ABC' 而那边并不是一次接收完成,而是分两次 AB 和 C 这部分你处理过吗?