我一直在TutorialsPoint读取TCPSockets,我需要一个简单的客户端来发出请求,但我不会混淆为什么没有响应。
网站API登录
在 login命令接受JSON对象作为参数,后跟响应的EOT字符。
来自网站的API
这就是我所拥有的
def connect
url = "someurl.com"
port = 19534
loginRequest = 'login {"protocol":1,"client":"testruby","clientver":0.1}' +"\04"
s = TCPSocket.open(url,port)
s.puts(loginRequest)
while line = s.gets
puts line.chop
end
puts "end"
s.close
end
connect
我的尝试
1)我在终端中运行ruby代码,但我与服务器的连接立即关闭。
我完全无能为力,并会对此表示赞赏。
答案 0 :(得分:2)
服务器似乎正在使用原始TCP / IP,使用0x04字符表示"消息结束"。
您的代码似乎更喜欢阻止IO(尽管它可能不是我的首选),所以请允许我建议阻止API调整:
require 'socket'
module VNDB
public
def send_message message
raise "Not connected" unless @s
@s.write (message + "\x04")
end
def get_message
raise "Not connected" unless @s
message = ''
message << @s.getc until message[-1] == "\x04"
message
end
def connect
url = "someurl.com"
port = 19534
loginRequest = 'login {"protocol":1,"client":"testruby","clientver":0.1}' +"\04"
@s = TCPSocket.open(url,port)
send_message loginRequest
puts get_message
puts "end"
@s.close
@s = nil
end
extend self
end
VNDB.connect
P.S。
我无法测试代码,因为&#34; someurl.com&#34;我想这不是真正的地址。
数据库服务器不使用Websockets(这是协议的名称),因此请考虑编辑您的问题并删除该标记。