V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ColorfulNight
V2EX  ›  Java

计算机通信的一点疑问

  •  
  •   ColorfulNight · 2016-04-18 23:53:18 +08:00 · 2748 次点击
    这是一个创建于 3169 天前的主题,其中的信息可能已经有所发展或是发生改变。

    服务器有公网 IP ,客户端通过路由器拨号上网,使用静态的 IP 地址,现在客户端要和服务器通信,要求能发送信息到服务器,并且要能接收到服务器发来的信息,用 Socket 怎么实现? 我在网上找到两种说法: 1.客户端先发起 Socket 链接,只要不断开,两边都可以互相通信。 2.需要在客户端链接的路由器进行端口映射,即路由器指定一个端口,只要这个端口收到的信息都发回到指定客户机。 我的问题是: 1.第一种说法是对的么? 2.第二种的 Socket 和第一种有什么区别? 3.还有更简单的么?

    6 条回复    2016-04-19 02:29:23 +08:00
    hpeng
        1
    hpeng  
       2016-04-19 00:06:35 +08:00 via iPhone   ❤️ 1
    1 讲道理, socket server 应该放在服务端,是服务端等客户端链接。然后自己解析流。
    2 这两个不是一个东西。那个叫 DMZ 。
    3 有,用上层的 http 。
    ColorfulNight
        2
    ColorfulNight  
    OP
       2016-04-19 00:41:54 +08:00
    @hpeng 意思就是两边都有 Socket 嘛,服务器是一直运行着 Socket 等待客户端发来请求,然后就可以一直通信,不需要调试路由器了,我这样理解对嘛?
    Marfal
        3
    Marfal  
       2016-04-19 00:50:57 +08:00
    @hpeng 好像不叫 DMZ 吧,叫 UPnP
    ColorfulNight
        4
    ColorfulNight  
    OP
       2016-04-19 00:53:28 +08:00
    @Marfal 这些技术都有看到,似乎都可以,还有个 NAT ?
    pimin
        5
    pimin  
       2016-04-19 00:56:26 +08:00   ❤️ 1
    @ColorfulNight
    1.是对的
    确实不用调试路由了
    实际上工作是路由自动完成的
    因为这就是路由的基本功能
    消息的分发
    即便两台都是在 Internet 上暴露的主机,互相发送消息也要经过运营商骨干网的 N 多路由,并不是想象的直连.

    2.第二种和第一种在你这个场景里没有区别
    如果做了映射,客户端和服务端的角色可以做调换
    主要好处是任意一方都可以主动连接另外一方
    缺点嘛就是安全

    3.最简单的就是把双方用一根网线连起来,不用路由,直连.
    Starduster
        6
    Starduster  
       2016-04-19 02:29:23 +08:00   ❤️ 1
    @ColorfulNight
    NAT 是网络地址转换,简单的说和 DMZ 也好 UPnP 也好是不同的东西,
    举个例子,
    本地 192.168.1.102 —(路由器 NAT )— 运营商给你的内网 IP 地址如 10.1.1.100 —(运营商 NAT )—公网出口如 182.138.98.37 。
    这个过程叫网络地址转换,运营商使用这个技术主要目的是节省 IPV4 地址,也使得内网设备对外不可见,引起的一个问题是你无法主动连接一个在 NAT 内部的主机,比如 Internet 上的其他人不能穿过路由器直接和你路由器下 192.168.1.102 的主机进行通信,那么 DMZ 或者端口转发这样的技术可以用来解决这个问题,你说的 2 实际上就是这种东西
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2242 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 136ms · UTC 02:00 · PVG 10:00 · LAX 18:00 · JFK 21:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.