问题描述
|
好的,所以我有一个非常简单的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
现在,当我运行客户端时,服务器报告它已连接,消息为“ Hi!\”。客户端一直在“浮动”状态(很抱歉,缺少更好的表达),始终保持打开状态(但是未打印出“ Lala”)。
当我再次运行客户端时,省略行“ 4”;服务器报告连接,“ Hi!”和客户端断开连接。客户端刚刚执行,我又回到了旧的提示。现在,我想知道为什么会这样。是GServer,客户端,我做错什么了吗?请告诉我。我现在正隐喻着痛苦。
感谢您阅读这份巨大的文字(可能充满了错别字)。
o
解决方法
我认为您对
serve
的参数有错误的认识。它不是消息,而是IO对象。在IO对象上调用bytes
会尝试读取它,直到没有要读取的内容为止(也就是说,直到关闭连接为止)。对于基于行的通信,应使用“ 7”,对于二进制协议应使用“ 8”。
尝试用此方法替换您的serve
方法:
def serve(socket)
puts socket.gets.chomp
socket.puts \'Lala\'
end