新手问题 用 Ruby 写 Socket 服务器,无法从局域网内的另一台电脑连接

baboon · 2017年10月27日 · 最后由 baboon 回复于 2017年10月27日 · 1781 次阅读

客户端连接的 host 设置为‘localhost’的时候,可以用本机连接上。 host 设置为‘127.0.0.1’的时候,用本机都无法连接上。 host 设置为‘192.168.0.xxx’的时候也是本机和其他机器都无法连接。 代码如下,有大神指教下是怎么回事吗……?

服务端

require 'socket'                

module CloudHash
    class Server
        def initialize(port)
            @server = TCPServer.new(port)
            puts "Listening on port #{@server.local_address.ip_port}"
            @storage = {}
        end

        def start
            Socket.accept_loop(@server) do |connection|
                handle(connection)
                connection.close
            end
        end

        def handle(connection)
            request = connection.read
            connection.write process(request)
        end

        def process(request)
            command, key, value = request.split("/")
            case command.upcase
            when 'GET'
                @storage[key]
            when 'SET'
                @storage[key] = value
            end
        end
    end
end

server = CloudHash::Server.new(4481)
server.start

客户端

require 'socket'   

module CloudHash
    class Client
        class << self
            attr_accessor :host, :port
        end

        def self.get(key)
            request "GET/#{key}"
        end

        def self.set(key, value)
            request "SET/#{key}/#{value}"
        end

        def self.request(string)
            @client = TCPSocket.new(host, port)
            @client.print(string)
            @client.close_write
            @client.read
        end
    end
end

CloudHash::Client.host = 'localhost'
CloudHash::Client.port = 4481

server = TCPServer.new("127.0.0.1", port)

guyanbiao 回复

哦哦哦,明白了,谢谢!!

需要 登录 后方可回复, 如果你还没有账号请 注册新账号