好的,所以我有一个非常简单的GServer服务器和一个更简单的TCPSocket客户端(我考虑编写自己的异步TCPServer,但结果证明这是我现在可以填充的更大的鞋子,所以我偶然发现了wonderul GServer)。
现在我在server.rb
:
require 'gserver'
class PServer < GServer
def initialize
super(9998)
end
def serve client_msg
for byte in client_msg.bytes
print byte.chr #Just playing, heh
end
print "\n"
client_msg.print 'Lala'
end
end
s = PServer.new
s.audit = true
s.debug = true
s.start
s.join
所以,当我运行它时,我没有遇到任何问题(我认为)并获得此输出:
[日期和内容,输入时间太长] PServer 127.0.0.1:9998开始
client.rb
代码:
require 'socket'
client = TCPSocket.new('localhost', 9998)
client.print "Hi!"
p client.gets
client.close
现在,当我运行客户端时,服务器报告它已连接,“嗨!”信息。客户'浮动'打开(抱歉没有更好的表达)整个时间,打开连接(但“Lala”没有打印出来)。
当我再次运行客户端时,省略行p client.gets
;服务器报告连接,“嗨!”并断开客户端。客户端刚刚执行,我回到了旧的提示符。现在,我想知道为什么会这样。是GServer,客户,我做了一件可怕的错误吗?请告诉我。我现在正处于一种隐喻的痛苦中。
感谢您阅读这篇巨大的文字(可能充满了拼写错误)。 XO
答案 0 :(得分:0)
我认为您对serve
的参数有错误的想法。它不是消息,而是IO对象。在IO对象上调用bytes
将尝试读取它,直到没有任何内容可读(即,直到连接关闭)。您应该使用gets
进行基于行的通信,或使用read
进行二进制协议。
尝试使用以下方法替换serve
方法:
def serve(socket)
puts socket.gets.chomp
socket.puts 'Lala'
end