我有一个用C编写的正在运行的服务器,我需要为这个服务器创建一个ruby客户端。服务器通过虚拟机在ubuntu上运行,我正在使用Mac OS(如果真的很重要,我就不知道了。)
到目前为止,我在客户中所拥有的是
myStreamSock = Socket::new( Socket::AF_INET, Socket::SOCK_STREAM, 0 )
myaddr = [Socket::AF_INET, 3333, 127, 0, 0, 1, 0, 0].pack("snCCCCNN")
myStreamSock.connect( myaddr )
返回
`connect': Connection refused - connect(2) (Errno::ECONNREFUSED)
这是因为服务器是在vm上运行的,还是我错过了什么?
任何帮助都是真正的帮助!
答案 0 :(得分:1)
我一直使用Ruby进行端口扫描,我使用一个非常简单的套接字连接:
begin
a_sock = Socket.new(:INET,:STREAM)
raw = Socket.sockaddr_in(port,@ip)
port_status(port,"Open") if a_sock.connect(raw)
rescue (Errno::ECONNREFUSED) #check if the port is closed
port_status(port,"Closed")
rescue (Errno::ETIMEDOUT)
port_status(port,"Timed Out")
ensure
a_sock.close if a_sock
end
def port_status(port,status)
@ports.merge!("port_#{port}".to_sym => {status: status})
end
显然这与你想要做的不一样,但它应该给你一些想法。还有一些变量没有明显声明,因为这是从块中取出的。