我做了一个简单的连接程序,使用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;
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;
解决方案 »
- Delphi6专业版没法在WinXP以非管理员身份安装,如何解决,个人版可以么?
- 字符串提取问题!高手请帮忙!
- 网络版的数据连接问题?
- 如何将excel中的几张表页中的数据导入到access中?
- 各位好!请问ShellComboBox1如何用呀!
- 有没有办法读取dll文件中的函数和过程名?????有工具也好。
- 读写INI文件的问题
- 如何去除调用数据库时的Database Login的对话框?(在线等待,马上给分)
- 解决重大技术问题! 高手请进!!!(3)——因为我在原来的帖子里发言超过50次:(
- 如何将程序加入到鼠标右键中
- 如何在磁盘上建立并读写一个2进制的文件。如果用Stream操作怎么实现?
- 用IdFTP这样上传文件对吗?
双方嗅探一下看socket有没有问题
另外,连接到内网必须有代理,访问白宫没有问题的话就算正常
你要将服务器的电脑连接的adsl做端口映射,这个资料网上大把。
这边发送了 'ABC' 而那边并不是一次接收完成,而是分两次 AB 和 C 这部分你处理过吗?