2013-05-28 41 views
0

林本地服務器上使用我的筆記本電腦下面的代碼作爲服務器:連接被拒絕來自外部的連接

WSADATA wsd = { 0 }; 
WSAStartup(MAKEWORD(2, 0), &wsd); 

SOCKET s = socket(AF_INET, SOCK_STREAM, 0); 
SOCKADDR_IN sin = { 0 }; 
sin.sin_family = AF_INET; 
sin.sin_port = htons(15000); 
sin.sin_addr.s_addr = inet_addr("0.0.0.0"); 

bind(s, (const sockaddr*)&sin, sizeof(sin)); 
listen(s, 10); 

int len = sizeof(SOCKADDR_IN); 
SOCKET a = accept(s, (sockaddr*)&sin, &len); 

而下面的代碼運行在我的手機:

Socket s = new Socket(); 
    try { 
     s.connect(new InetSocketAddress("*.*.*.*", 15000)); 
     Toast.makeText(getApplicationContext(), "Connected", Toast.LENGTH_LONG).show(); 
    } catch (IOException e) { 
     Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show(); 
     e.printStackTrace(); 
    } 

我用與我的公網IP中的另一臺計算機上的telnet一樣。可悲的是,我得到下面的異常消息:

failed to connect to /*.*.*.* (port 15000): connect failed: ECONNREFUSED (Connection refused) 

好吧,我重新檢查我的路由器設置,IPCONFIG給我192.168.1.109我的筆記本電腦IP,你可以在下面的圖片中看到的端口轉發到IP: Port forwarding

當我再次確認我的防火牆已停用後,我終於啓動wireshark並檢查了端口15000.沒有任何傳入,沒有tcp數據包。所以很明顯,數據包沒有到我的電腦,並被拒絕較早(路由器?)

我有它的工作在前幾天(兩個星期上)在另一個端口,我託管我們正在爲我們的遊戲服務器。現在同樣的問題,不再工作。

這可能是導致所有傳入連接的拒絕?

+0

是的,正如你可以在圖像中看到端口15000轉發到我的內部IP – Muepe

+0

我會使用'sin.sin_addr.s_addr = INADDR_ANY;'雖然我懷疑這不是問題。 –

+0

是的,對,我認爲它在C++中是不同的:D。我應該寫,我寫的客戶端和服務器在C++ /。NET/Java的,以確保其不會與編程語言的問題。 – Muepe

回答

0

我能解決我的問題,但我不知道什麼是真正的原因。我從路由器中刪除了所有轉發服務,並從頭開始重新創建它們,現在它可以工作。

因此,如果其他人來此線程類似的問題:如果你有一個瑞士電信路由器刪除所有自定義轉發服務器並重新創建它們,也許它解決了這個問題。