在局域网内有三台机器A、B、C 
B作为端口映射服务器使用,现将C的1901端口映射到B的1602端口,A作为Client,C作为Server;A和C的socket连接是通过B的1602端口映射来实现的,现在的问题是如何写出一个运行在B上的端口映射程序,实现上述要求。作了几次尝试,只实现了从A发送数据到C,而从C就无法返回数据信息给A。我们知道如果A和C之间通过socket直连,那么A和C之间是能很正常的实现数据信息的双向传递,但是通过B的端口映射转发后,就存在问题。 
希望能提供一些可行的模型,问题解决后另开500分相赠。

解决方案 »

  1.   

    实践证明,网上很多的Proxy软件都不能实现上面的功能要求;至少我试过的情况是这样。
      

  2.   

    建立两个连接,A与B:1602,B:某个端口与C:1901...........这样,当A发数据时B转发到C:1901,当C:1901发数据时,转发给A就可以了...............
      

  3.   

    实际上通过NAT来做的端口映射就不存在上面的问题。
      

  4.   

    NAT跟端口映射是两种不同的业务,首先通过NAT,本地可以访问互联网,然后再通过映射使得互联网透过映射端口来访问本地资源.
      

  5.   

    换句话说,如果你把B作为C的网关,从而使得C可以透过B访问到A,然后再映射某端口使得A可以访问到B,如此就可以达到你要求的效果了.
      

  6.   

    如果觉得还有问题,个人建议加深TCP/IP协议理论的学习.
      

  7.   

    NAT通常用于公网到内网的端口映射,从某种意义上来说,基本原理差不多。
      

  8.   

    想透明处理的话,B可以截获C发给A:xxx的包,做相应处理。
    B和C同一个局域网的话,把B做网关,ARP欺骗,B用RawSocket截取数据等都可以...............
      

  9.   

    NAT是转发原始的数据包;你使用软件转发,接受端得不到原始发送者的信息,怎么可能原路返回呢!
      

  10.   

    c->b把发到1602的数据都转到我的1901,c accept1901,b accept1602
    a用socket1 conect b 1602  b accept( socket2) 同时 b 用 socket3 connet c 1901    c  accept( socket4)      socket1->socket2->socket3->socket4 socket4->socket3->socket2->socket1 这里socket2,socket3是成对存在的,socket2收到的就给socket3,3收到的就给2
    同理假设有其他的比如d用socket1 conect b 1602  b accept( socket7) 同时 b 用 socket8 connet c 1901    c  accept( socket9)
    这里socket7,socket8是成对存在的不知道说的对不对,仅供lz参考
      

  11.   

    实际上我要实现的是一个类似于NAT端口映射功能的程序。
      

  12.   

    nat能不能做到这个事情 不知道考察过没有?
      

  13.   

    NAT依赖于系统的网关和路由逻辑.
      

  14.   

    unsigned小财主同志,你说的很有道理。