内网                                  外网
______________________________________________
ClientA-            网闸               Server
ClinetB |           TCP通道             / | \
ClientC-            |不支持UDP          外网ClientA
------------------->|                   外网ClientB
UDP协议             |                   外网ClientC
                    |<-----------------UDP协议
见上图,为解决内网ClientA与外网ClientA之间的通讯,由于中间网闸设备不支持UDP协议,所以需要把UDP协议封装成TCP协议,在网闸两端分别开发UDPTOTCP中转服务.ClientA-----UDP->服务程序->TCP->网 闸->TCP->服务程序->UDP->server or client
从外到内仍遵循该过程.本网以内的Client无需中转.异网之间走服务程序中转.
现在存在地问题就是
ClientA->UDP->服务程序->TCP->网 闸->TCP->服务程序->UDP->Server,这时Server无法得知真实发给他UDP信息的ClientA的地址和端口.因为在Server看来,发给他UDP包的是服务程序.
不知道哪位大侠有好的解决办法没有.也就是说UDP在TCP发送过程中能不能保留他的源地址和端口.我不想在发送的包中记录这样的信息.谢谢.如果解决500分奉送~

解决方案 »

  1.   

    ClientA和ClientB那个是外网,还是都是内网?
      

  2.   

    getit911(Windows转Linux中) :
    我的意思是内网外网都有clientA 和ClientB
      

  3.   

    感觉多此一举,为什么不直接用tcp
      

  4.   

    http://www.ppcn.net/n1306c2.aspx
    http://www.ppcn.net/n1306c2.aspx
      

  5.   

    我觉得不管是UDP还是TCP都是一个协议,数据---UDP--->传输---->UDP解析--->最终数据   其中"最终数据"已经把IP和端口都去掉了,你知道自己再做一个UDPtoTCP的协议,其中肯定要包括这部分工作的,个人想法……