我一直在研究一个允许通过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
答案 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| ... }
。