网络聊天程序!! (需要一点帮助)

时间:2015-03-27 14:02:48

标签: ruby sockets

我一直在研究一个允许通过TCPsocket命令进行通信的小脚本。我的代码中出现了一个小错误。由于某些原因,在运行两次后,它会停止运行RX循环。

我还担心,在等待我输入get语句的内容时,它不会在寻找收到的消息......

非常感谢任何帮助。在此先感谢你们

require 'socket'

ip = 'localhost'
port = 18000

TX = Thread.new do
    loop {
        Serv = TCPSocket.open(ip, port)
        message = gets.chomp()
        Serv.write(message)
        Serv.close
    }
end
RX = Thread.new do
    loop {
        server = TCPServer.open(port)
        client = server.accept
        puts client.gets
    }
end

RX
TX.join

1 个答案:

答案 0 :(得分:2)

您应该在循环外部初始化服务器。 (为了避免警告,你不应该在循环中重新分配像Serv这样的常量名称):

require 'socket'

ip = 'localhost'
port = 18000

TX = Thread.new do
    loop {
        conn = TCPSocket.open(ip, port)
        message = gets.chomp()
        conn.write(message)
        conn.close
    }
end
RX = Thread.new do
    server = TCPServer.open(port)
    loop {
        client = server.accept
        puts client.gets
    }
end

TX.join

如果您想同时为多个客户提供服务,请在http://ruby-doc.org/stdlib-1.9.3/libdoc/socket/rdoc/TCPServer.html的第二个示例中提示并使用Thread.start(server.accept) { |client| ... }