2013-04-04 66 views
0

我有一個用C編寫的正在運行的服務器,我需要爲此服務器創建一個ruby客戶端。服務器通過虛擬機在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 2013-04-04 20:26:23

回答

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/

相關問題