user-0 提问: 关于用套接字从内网到外网的通信

回复:
user: user-0
content: 引用 2 楼 user-3 的回复:两个不在同一个局域网下的PC互相通信： 1）需要端口映射   需要把socket接收端（server）的计算机的端口和这台机器所在的路由器的相应的端口映射起来 因为一般计算机都是通过路由器和internet连接的，任何internet过来的消息都会先经过路由器才能到达pc，普通的一个信息过来，路由器就是直接拦住并丢弃了，不会往内网里的任何机器上发的 而如果你做了端口映射：即把内网的某个机器上的某个端口和路由器的某个端口映射起来的话，当路由器的这个端口接收到信息的时候，就等于那个机器接收到了这个信息---------所谓端口映射，简单点说就是把两个端口捏成一个 2）socket的接收端需要固定的外网IP（static ip）～～～由于当今计算机太多，ip4早就用光光了，现在电信服务商的办法都是动态ip，你可以在百度里输入：我的ip地址，然后百度会告诉你你的外网ip是什么，但这个ip是个动态ip，你把路由器关了再开一下，很可能就变了～～～～～～这个动态ip是电信商管理的路由器给你分配的，你想通过这个ip接收信息，就和上面的1）的道理一样，除非你能进入电信服务商的那个给你分配ip的路由器去做端口映射-------这显然是不可能的，所以，你需要给你的server申请一个static ip（静态ip），在ip4如此紧张的今天，这个申请很可能需要你花钱................  如果你没有静态ip（你应该肯定没有），那么请看3） 3）找免费的动态域名解析服务--------国内比较用得多的应该是“花生壳”，自己百度下个客户端用用，很简单  不过，有一种情况3）也会失效，就是电信服务商变态到给你用10开头的ip做外网..............本来10开头的ip是私有的保留ip，不会做外网的，但是由于ip资源紧张，所以现在连10开头的都有那来做外网地址的了........10开头的可以做一个不太大的城市范围的外网ip----------城域网～～～如果你“不幸”被分配到了10开头的网址.......那么你要想用上面的办法实现socket信息发送，就必须确保你的客户端和服务器端必须在同一个城域网内........  4）百度下vpn，可以找个免费的vpn服务器，用这个免费的vpn服务器做中转站，实现客户端和服务器端的socket信息发送-----这个方法最简单也最靠谱  谢谢你，真的还有很多东西要学~~ 还有几个问题： 1、在百度上查到的我的IP就是路由器IP吗？ 2、如果我把我的计算机端口和路由器端口映射起来了，用SOCKET绑定百度上查到的这个IP，那是不是在我重启电脑之前可以和不同局域网的电脑通信？ 3、一般映射哪个端口进行通信？或者说怎样判断该映射哪些端口？

user: user-1
content: 学习点基本的TCP/IP知识吧。

user: user-2

user: user-3
content: 引用 3 楼 qq_27432295 的回复:[quote=引用 2 楼 user-3 的回复:] 两个不在同一个局域网下的PC互相通信： 1）需要端口映射   需要把socket接收端（server）的计算机的端口和这台机器所在的路由器的相应的端口映射起来 因为一般计算机都是通过路由器和internet连接的，任何internet过来的消息都会先经过路由器才能到达pc，普通的一个信息过来，路由器就是直接拦住并丢弃了，不会往内网里的任何机器上发的 而如果你做了端口映射：即把内网的某个机器上的某个端口和路由器的某个端口映射起来的话，当路由器的这个端口接收到信息的时候，就等于那个机器接收到了这个信息---------所谓端口映射，简单点说就是把两个端口捏成一个 2）socket的接收端需要固定的外网IP（static ip）～～～由于当今计算机太多，ip4早就用光光了，现在电信服务商的办法都是动态ip，你可以在百度里输入：我的ip地址，然后百度会告诉你你的外网ip是什么，但这个ip是个动态ip，你把路由器关了再开一下，很可能就变了～～～～～～这个动态ip是电信商管理的路由器给你分配的，你想通过这个ip接收信息，就和上面的1）的道理一样，除非你能进入电信服务商的那个给你分配ip的路由器去做端口映射-------这显然是不可能的，所以，你需要给你的server申请一个static ip（静态ip），在ip4如此紧张的今天，这个申请很可能需要你花钱................  如果你没有静态ip（你应该肯定没有），那么请看3） 3）找免费的动态域名解析服务--------国内比较用得多的应该是“花生壳”，自己百度下个客户端用用，很简单  不过，有一种情况3）也会失效，就是电信服务商变态到给你用10开头的ip做外网..............本来10开头的ip是私有的保留ip，不会做外网的，但是由于ip资源紧张，所以现在连10开头的都有那来做外网地址的了........10开头的可以做一个不太大的城市范围的外网ip----------城域网～～～如果你“不幸”被分配到了10开头的网址.......那么你要想用上面的办法实现socket信息发送，就必须确保你的客户端和服务器端必须在同一个城域网内........  4）百度下vpn，可以找个免费的vpn服务器，用这个免费的vpn服务器做中转站，实现客户端和服务器端的socket信息发送-----这个方法最简单也最靠谱  谢谢你，真的还有很多东西要学~~ 还有几个问题： 1、在百度上查到的我的IP就是路由器IP吗？ 2、如果我把我的计算机端口和路由器端口映射起来了，用SOCKET绑定百度上查到的这个IP，那是不是在我重启电脑之前可以和不同局域网的电脑通信？ 3、一般映射哪个端口进行通信？或者说怎样判断该映射哪些端口？[/quote]  1）是的---是个动态ip 2）不是你重启电脑，而是重启路由器---路由器重启动态ip就很可能会变化～～～～不一定可以，我已经解释过了。如果你所说的不同的局域网在同一个城市，应该可以～～～ 3）百度：常用端口  这个问题你要自己上网查～～不过如果只是做个socket发送普通的消息的话，10000以后的端口一般可以随便用，你可以把你打算开放的端口百度一下，看看有没有特殊用途，如果有，就别用----其实用了也没事.......只是一般我们不会随便用那些有专门用途的端口～～

user: user-3
content: 两个不在同一个局域网下的PC互相通信： 1）需要端口映射   需要把socket接收端（server）的计算机的端口和这台机器所在的路由器的相应的端口映射起来 因为一般计算机都是通过路由器和internet连接的，任何internet过来的消息都会先经过路由器才能到达pc，普通的一个信息过来，路由器就是直接拦住并丢弃了，不会往内网里的任何机器上发的 而如果你做了端口映射：即把内网的某个机器上的某个端口和路由器的某个端口映射起来的话，当路由器的这个端口接收到信息的时候，就等于那个机器接收到了这个信息---------所谓端口映射，简单点说就是把两个端口捏成一个 2）socket的接收端需要固定的外网IP（static ip）～～～由于当今计算机太多，ip4早就用光光了，现在电信服务商的办法都是动态ip，你可以在百度里输入：我的ip地址，然后百度会告诉你你的外网ip是什么，但这个ip是个动态ip，你把路由器关了再开一下，很可能就变了～～～～～～这个动态ip是电信商管理的路由器给你分配的，你想通过这个ip接收信息，就和上面的1）的道理一样，除非你能进入电信服务商的那个给你分配ip的路由器去做端口映射-------这显然是不可能的，所以，你需要给你的server申请一个static ip（静态ip），在ip4如此紧张的今天，这个申请很可能需要你花钱................  如果你没有静态ip（你应该肯定没有），那么请看3） 3）找免费的动态域名解析服务--------国内比较用得多的应该是“花生壳”，自己百度下个客户端用用，很简单  不过，有一种情况3）也会失效，就是电信服务商变态到给你用10开头的ip做外网..............本来10开头的ip是私有的保留ip，不会做外网的，但是由于ip资源紧张，所以现在连10开头的都有那来做外网地址的了........10开头的可以做一个不太大的城市范围的外网ip----------城域网～～～如果你“不幸”被分配到了10开头的网址.......那么你要想用上面的办法实现socket信息发送，就必须确保你的客户端和服务器端必须在同一个城域网内........  4）百度下vpn，可以找个免费的vpn服务器，用这个免费的vpn服务器做中转站，实现客户端和服务器端的socket信息发送-----这个方法最简单也最靠谱

user: user-0
content: 网上看到一个NAT转换，是这个原因吗？我是新手，不太懂.....NAT转换后的IP是外网IP吗？我改成了外网IP也不行啊.....要怎么样才可以