【问题标题】:TCPServer socket in rubyruby 中的 TCPServer 套接字
【发布时间】:2011-03-09 06:04:29
【问题描述】:

我想使用套接字在两台计算机之间建立连接。为此,其中一个是服务器,这是我编写的代码:

sock= TCPServer.open('localhost', 6666)
sock.accept

客户端尝试建立连接:

client = TCPSocket.open(ip_server, 6666)

但不工作。我注意到扫描服务器的端口,服务器没有打开网络端口,只在本地模式下工作。

任何建议,请提前考虑

【问题讨论】:

    标签: ruby sockets tcp


    【解决方案1】:

    我已成功使用此代码。服务器端:

    serverSocket = TCPServer.new( "", port )
    serverSocket.accept
    

    在客户端

    t = TCPSocket.new(server_ip, port.to_i)  
    

    不过,最近我开始使用'EventMachine' gem,它让处理套接字变得容易了 10 倍

    【讨论】:

      【解决方案2】:

      已经说过服务正在使用环回“localhost”以“本地模式”运行。

      sock= TCPServer.open('localhost', 6666)
      sock.accept
      

      TCPServer 是底层文件描述符的便捷接口。坦率地说,它几乎使套接字编程变得太容易了。

      就像已经说过的那样,'localhost' 是到127.0.0.1 的环回。因此,您的陈述相当于:

      sock= TCPServer.open('127.0.0.1', 6666)
      sock.accept
      

      如果您将在本地网络上使用网络连接,假设服务器分配的 IP 为 192.168.0.1,您可以分配一个本地 IP 地址来监听:

      sock= TCPServer.open('192.168.0.1', 6666)
      sock.accept
      

      对于一个开放的端口,可以想象对所有人开放,使用:

      sock= TCPServer.open(6666)
      sock.accept
      

      请记住,一切都是文件——您建立的连接是从两个(或更多)位置读取和写入同一个文件或一系列文件。重要的是控制谁可以访问这些文件,以及在何种程度上。

      【讨论】:

        【解决方案3】:

        是的,没关系,因为您说它应该将服务器端口绑定到'localhost' 的接口,这是127.0.0.1,并且绑定到您的环回接口,而不是连接到现实世界的任何真实接口。

        你应该试试

        sock = TCPServer.new(6666)
        sock.accept
        

        【讨论】:

          【解决方案4】:

          它在“本地模式”下工作,因为它在 localhost 上侦听,这是启动服务器的计算机的环回地址。服务器的 IP 地址应该是计算机在本地网络上的地址(例如 192.168.xx) .

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-02-17
            • 1970-01-01
            • 1970-01-01
            • 2020-04-27
            相关资源
            最近更新 更多