TServerSocket和TClientSocket 做NAT转发???? http://www.delphibbs.com/delphibbs/dispq.asp?lid=2978268我在一个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;

解决方案 »

  1.   

    dephi是有漏洞,看你用的是什么版本了
      

  2.   

    你说对方发送频率快,那么有没有办法解决???,我用VB写的程序可以做中转,但是为什么Delphi还是不行
      

  3.   

    我把SendText改成了SendBuf,结果转发聊天软件程序可以,可以转发“远程桌面”程序就不行了
      

  4.   

    我最近也搞这个
    用Blocking担心程序挂了
    用NotBlocking就立刻挂(80%机会)
    学习
      

  5.   

    是,现在我做成了SendBuf 发送流和接收流,结果还是老样子,不能用远程桌面
      

  6.   

    delphi5.0,TServerSocket与TClientSocket之间高速传送数据时,有丢包现象!
    两种解决办法:1,降低发送速度;2,增加应答确认。
      

  7.   

    1. 如果你使用非阻塞方式的TServerSocket,则应该使用ReceiveBuf来接收数据,而不能用ReceiveText,因为你写的这个程序是个NAT,你是不能肯定转发的数据只是Text的。2. 如果你使用阻塞方式的TServerSocket,则应该TStream来接收数据。3. 至于楼上所说的丢包现象,我还没有发现。在我的应用实例中,一个程序同时有32个TServerSocket,每个都连接着一个2Mbps的数据广播源,另外还有32*8个TClientSocket,连接着Client,程序运行良好,没有丢包现象出现。