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 に答える