请教高手在局域网能够通连,但是太远了就出问题!!

twlx_0 2004-01-06 03:34:42
我做了一个简单的连接程序,使用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;
...全文
25 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnmaxu 2004-01-11
  • 打赏
  • 举报
回复
可能是由于网络阻塞,造成你的数据不连贯,而程序又没有对数据进行容错处理,例如:
这边发送了 'ABC' 而那边并不是一次接收完成,而是分两次 AB 和 C 这部分你处理过吗?
sfwany 2004-01-09
  • 打赏
  • 举报
回复
请教一下,那个控件哪找到呀?(ServerSocket和ClientSocket)
hnhb 2004-01-07
  • 打赏
  • 举报
回复
“太远”就报错??
那是不是一次也连不上呢?什么协议啊?
yangyugw 2004-01-07
  • 打赏
  • 举报
回复
流星adsl需要端口映射的,否则你连接的不过是adsl而已,根本不能连接到计算机
你要将服务器的电脑连接的adsl做端口映射,这个资料网上大把。
jawibn 2004-01-07
  • 打赏
  • 举报
回复
连接发生错误时把ErrorCode打印出来才有意义嘛
双方嗅探一下看socket有没有问题
另外,连接到内网必须有代理,访问白宫没有问题的话就算正常
huanglin521 2004-01-07
  • 打赏
  • 举报
回复
服务端不会在局域网内吧,如果是的话,一定连接不上的。
zhp97 2004-01-07
  • 打赏
  • 举报
回复
同意 checkyvc6(沉思发挥调整) 的看法
checkyvc6 2004-01-06
  • 打赏
  • 举报
回复
可能原因:
1
超时部分设置太短
2
协议可能不可路由
3
还没有想到
twlx_0 2004-01-06
  • 打赏
  • 举报
回复
比如说一个在北京一个在深圳,都是用宽带或者ADSL上网的。
rlpcdk 2004-01-06
  • 打赏
  • 举报
回复
关注!
请问太远是指多远?两台计算机分别是用什么方法上网的?

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧