★TServerSocket和TClientSocket 做NAT转发???? ( 积分: 100 )

  • 主题发起人 主题发起人 swordqj
  • 开始时间 开始时间
S

swordqj

Unregistered / Unconfirmed
GUEST, unregistred user!
我在一个form上放置一个TserverSocket和一个TClientSocket控件

TServerSocket用来监听程序,

而TClientSocket用来将TserverSocket接收的【A】数据发送到别处【B】;

同时TServerSocket也将TClientSocket接收的【B】数据发送到数据起始处【A】

如下图

【A】-------->【[ServerSocket]--[ClientSocket]】-------->【B】
【A】<--------【[ServerSocket]--[ClientSocket]】<--------【B】

以上目的是做到一个转发的作用,有点象代理。

【问题】使用这个进行传输某些程序如:局域网聊天程序时候很正常;但是传输如“远程桌面”或者VNC这样的通信程序时候就经常弄得无法继续(超时),显示是ClientSocket的10054错误;后来我用VB做Socket按照Delphi的语句结构结果试验成功。是不是我语句写的有问题,还是Delphi的处理不好??

以下是我得语句---------------------------------
代码:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
Var
    CsStr:String;
begin
    csstr := ServerSocket1.Socket.Connections[0].ReceiveText;
    clientsocket1.Socket.SendText(CSstr);
end;
--------------
procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
var
  t_str:string;
begin
    t_str:=ClientSocket1.Socket.ReceiveText;
    ServerSocket1.Socket.Connections[0].SendText(t_str);
end;
 
我在一个form上放置一个TserverSocket和一个TClientSocket控件

TServerSocket用来监听程序,

而TClientSocket用来将TserverSocket接收的【A】数据发送到别处【B】;

同时TServerSocket也将TClientSocket接收的【B】数据发送到数据起始处【A】

如下图

【A】-------->【[ServerSocket]--[ClientSocket]】-------->【B】
【A】<--------【[ServerSocket]--[ClientSocket]】<--------【B】

以上目的是做到一个转发的作用,有点象代理。

【问题】使用这个进行传输某些程序如:局域网聊天程序时候很正常;但是传输如“远程桌面”或者VNC这样的通信程序时候就经常弄得无法继续(超时),显示是ClientSocket的10054错误;后来我用VB做Socket按照Delphi的语句结构结果试验成功。是不是我语句写的有问题,还是Delphi的处理不好??

以下是我得语句---------------------------------
代码:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
Var
    CsStr:String;
begin
    csstr := ServerSocket1.Socket.Connections[0].ReceiveText;
    clientsocket1.Socket.SendText(CSstr);
end;
--------------
procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
var
  t_str:string;
begin
    t_str:=ClientSocket1.Socket.ReceiveText;
    ServerSocket1.Socket.Connections[0].SendText(t_str);
end;
 
WSAECONNRESET (10054) Connection reset by peer.

存在的连接被远程主机强制关闭。通常原因为:远程主机上对等方应用程序突然停止运行,或远程主机重新启动,或远程主机在远程方套接字上使用了“强制”关闭(参见setsockopt(SO_LINGER))。另外,在一个或多个操作正在进行时,如果连接因“keep-alive”活动检测到一个失败而中断,也可能导致此错误。此时,正在进行的操作以错误码WSAENETRESET失败返回,后续操作将失败返回错误码WSAECONNRESET。
 
采用异常处理
 
后退
顶部