2013-04-04 2 views
0

У меня есть работающий сервер, написанный на C, и мне нужно создать рубиновый клиент для этого сервера. Сервер работает на ubuntu через виртуальную машину, и я работаю над Mac OS (я не знаю, действительно ли это имеет значение).Создать и подключиться к сокету. Отключено подключение - подключиться (2)

Что я имею в клиенте до сих пор

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) 

Является ли это потому, что сервер работает на виртуальной машине, или я что-то пропустил?

Любая помощь действительно оценена!

+0

Почему вы используете 'Socket' вместо' TCPSocket'? Этот порт открыт и принимает соединения? Вы пробовали что-то вроде telnet localhost 3333? – tadman

ответ

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/

Смежные вопросы