0

我有一个用 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 上运行,还是我在这里遗漏了什么?

任何帮助真的很感激!

4

1 回答 1

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

显然,这与您尝试做的不同,但它应该给您一些想法。还有一些变量没有被明显地声明,因为这是从一个块中取出的。

这也可能对您浏览https://thebc.ch/blog/217/ruby-of-wisdom/有用

于 2013-04-04T20:45:55.607 回答