我现在做了一个服务器程序,和客户端程序,它们之间通信是通过socket发送的,在局域网内测试均正确。不过如果将服务器应用在广域网中怎么办?如果服务器能获得一个公网IP,在局域网内的客户端是不是根据IP就能连到服务器上,如果是的话,服务器怎么连接客户端呢?地址总不能用客户端的私网地址吧,是不是要用到NAT穿越,不懂,还请高手指点!

解决方案 »

  1.   

    内网连外网只要IP正确就可以连,这也就是为什么你在内网可以看网页的原因,但是如果你要外网的话,但是服务端是在内网监听的,那么就会出现连接不上的情况,因为内网即使有100台PC,它们都只有一个外网的IP,所以就会出现连接不上的情况,这时可以做下端口的映射就可以了
      

  2.   

    首先回复东哥的问题,因为服务器也要向客户端发送一些消息,比如登陆成功等,我也是用socket发的。
    其实我的服务器和客户端都是两个模块,监听信息和发送信息,所以在发送信息的时候都需要知道对方的IP地址即可,端口是我自己设的。至于寒江雪所说的不是太懂,什么叫服务端在内网监听?服务器收到局域网发来的地址是对方的出口公网地址还是内网地址啊?如果公网地址加端口号,是不是直接按这个回复即可连接到客户端?
      

  3.   

    如果是TCP连接的话,建立好了连接就可以通讯了,服务器从哪个socket收的数据就从哪个socket发送数据,这样就会发到对应的client上,不需要在客户端在做监听了如果是UDP也不需要监听啊,直接recvfrom中的有两个参数就保存了对端的地址和端口,发送的时候往那里发送就可以了
      

  4.   

    本帖最后由 VisualEleven 于 2010-11-16 16:56:53 编辑
      

  5.   

    可以查看Accept到的socket的client地址
      

  6.   

    端口映射,或者有一台公网的服务器,做UDP打洞