V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
XooYoo
V2EX  ›  问与答

socket 外网通信

  •  
  •   XooYoo · 2020-01-11 20:51:48 +08:00 · 2060 次点击
    这是一个创建于 1779 天前的主题,其中的信息可能已经有所发展或是发生改变。

    自己用 python 写的 socket 的 TCP 通信,在局域网下能实现通信。现在想在外网下通信,用花生壳做端口映射,花生壳给了我一个域名***.wicp.vip ,通过 socket.gethostbyname("***.wicp.vip") 得到了一个 ip:112.24x.xx.xx,客户端绑定这个 ip,client_socket.bind((ip,9001)),服务器端绑定 server_socket.bind(("",9001))。但是双方还是不能通信。又百度了一下发现众说纷纭,什么 NAT 打洞啦,还有说做各种没听说过的测试啦。于是头昏脑胀不知到底该怎么办了。只求有木有大侠做过类似的项目的赐教一些经验心得,本人计算机网络知识少得可怜,给个学习的方向也好,感谢在先!

    7 条回复    2020-01-11 23:34:43 +08:00
    ysc3839
        1
    ysc3839  
       2020-01-11 21:18:50 +08:00
    客户端不需要绑定这个 IP,客户端要的是连接这个 IP。
    XooYoo
        2
    XooYoo  
    OP
       2020-01-11 21:41:11 +08:00
    @ysc3839 客户端绑定的 ip 不就是要连接访问的 ip 吗?
    ysc3839
        3
    ysc3839  
       2020-01-11 21:50:31 +08:00
    XooYoo
        4
    XooYoo  
    OP
       2020-01-11 22:05:37 +08:00
    @ysc3839 对不起,是我在问答里描述错了,应该是 client_socket.connect((ip,9001)) 。但我程序里是客户端 connect,也不能通信?
    opengps
        5
    opengps  
       2020-01-11 22:35:06 +08:00
    使用家庭网络,路由器需要有公网 IP,还有配置端口转发,也就是你查到的打洞。
    不过你有个思路还没有搞明白:区分客户端和服务端,性质跟各位网友访问某 web 站点一个道理
    服务端要求有公网 IP,可配置到达的端口
    客户端都是主动去连接服务端的 ip 和端口
    ysc3839
        6
    ysc3839  
       2020-01-11 23:32:06 +08:00 via Android
    @XooYoo 那建议你先开个 http 之类的服务,然后用浏览器试试能否访问。
    liuminghao233
        7
    liuminghao233  
       2020-01-11 23:34:43 +08:00 via iPhone
    你需要用花生壳内网版
    做端口映射 你服务器 bind 9001
    但是他分给你的公网映射出去肯定不是 9001 端口(
    你应该 connect 他给你的端口
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3681 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 10:44 · PVG 18:44 · LAX 02:44 · JFK 05:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.