一台机器在外网,有IP,一台机器在内网,,用的是局域网IP,自然用的是NAT转出去的。
两者想用UDP通讯传一些数据,内网机器A自然可以通过winsock发送数据到外网的机器B上,可是外网机器B如何把数据回发给内网机器A呢?在VB下有什么简单点的实现吗?用Winsock控件什么的,是不是要用到API啊?
望高人告之!!

解决方案 »

  1.   

    大哥,不会吧,这个办法也太拙了点啊~^_^
    我知道内网机器在出去的时候,网关会建立一个session记录,问题是怎么在vb里记录这个session然后发送相应的数据包到网关呢?
      

  2.   

    内部计算机和外部通讯的时候,IP和端口会被映射,映射成什么谁也不知道。所以必须由内部计算机主动和外部计算机进行通讯,这时候外部的计算机才能获得该机器的映射IP和端口,然后利用映射结果进行通讯
      

  3.   

    呵呵,这问题最近略有所闻.在这随便说说,有什么错误或不解请指证.首先应该是内网机器向外网机器通过UDP发送数据.NAT自然就为内网机器映射一个通向该主机的通道.如,内网机器用1234号端口与外网的1234号端口通信.但到了外网机器那,就是是1234->1234这样的端口对应关系了.可能是60000->1234这样.为啥呢?因为NAT的关系.在这就不说太多了.NAT为内网机器通向外网机器生成通道后,下次,(如:60000端口)有数据来到NAT上时,NAT就会自动把这些数据转发到内网机器的1234端口上了!明白吧?注意,这个通道是有生命周期的.多长要看NAT而定.也就是说,在服务器收到数据后,要看看winsock的远端端口属性.对方是用那个端口就要相应的发向对方的这个端口,如:内网机器的1234端口向外网机器的1234端口发送,到了NAT,把端口映射成60000了,那么外网主机就不能再向内网主机的1234发送.要向60000发送!需看原文的这里来:http://community.csdn.net/Expert/topic/3091/3091185.xml?temp=.9001276
      

  4.   

    谢谢大家,可是我现在服务器端收到数据后读取winsock的远程端口属性,什么都读不到,读出来的都是空值啊?
    这些原理我也都比较清楚了,就是该如何具体实现那?请各位大哥明示!!!
      

  5.   

    哈哈~又看到"蟑螂"了!要GetData之后读取才有...远程主机,我现在的环境还没有得到.可能经过了NAT后就不是那么一回事了.可我没条件测试了~
      

  6.   

    噢~原来是取错属性了!
    搞定了,在DataArrival之后,调用GetData方法,就可以读取到对方的端口和对方的IP了!
    注意,对方的IP是RemoteHostIP这个属性,不是RemoteHost这个...一直都搞糊涂了,为什会有两个差不多的属性.呵呵~不明白为啥总有人说Winsock这控件不行.我觉得它还挺行的,会用就行了...
      

  7.   

    我有做过这样的程序。用 UDP 一个内网一个外网是绝对能通的。两个 winsock 内网与外网通信时,一定要外网机器的 winsock 向内网的公网IP发请求,然后内网的winsock 再向外网IP请求,这样就能通了。我有测试过。
      

  8.   

    TO:airon2002
    一般都只会有服务器的IP!楼主只是没有取得内网主机的IP与端口!只要设置正确就能通!
      

  9.   

    //这些原理我也都比较清楚了,就是该如何具体实现那?请各位大哥明示!!!    好了,情况说明,解决方法也简单.从MSDN得知,UDP通信时,Winsock的RemoteHost与RemotePort属性是可以随便更改的.也知道了RemoteHostIP就是跟你通信的机器的IP,也知道RemotePort就是跟你通信的机器的端口.只要内网机器向外网机器发送UDP数据时,外网机器在DataArrival事件发生时,调用GetData取得数据后,就可以通过RemoteHostIP与RemotePort,知道对方的IP和端口了,这时再把自己的RemotePort与RemoteHost属性改为相应的端口与IP就可以返回信息给内网机器了!
      

  10.   

    我在外网(有世界唯一IP地址的机器)机,Winsock.LocalIP得到的是个无效的IP地址,不能得到那个有效的地址怎么办?本地连接设置为IP自动获得.
      

  11.   

    我和你相反,内网机连外网机连不通,用Tcp/ip,外网机监听。
      

  12.   

    to:阿龙:呃,不对,看错了,我是和你一样的啊,都是外网机监听,不过我是用udp,应该没问题的,建议你多多看看,不知道你是具体什么情况。