2013-05-12 90 views
0

我試圖學習Socket編程,並在連接到我的服務器應用程序時遇到此錯誤。由於目標機器主動拒絕,所以無法建立連接[與其他人不一樣]

下面是在服務器應用程序我的的TcpListener聲明:

TcpListener listener = new TcpListener(IPAddress.Loopback, 5152); 

,這裏是我的客戶端應用程序我的TcpClient的聲明:

TcpClient client = new TcpClient(Dns.GetHostEntry(IPAddress.Loopback).HostName, 5152); 

我已看過一些類似這樣的問題,並我總是得到相同的答案:服務器應用程序不在監聽端口或根本沒有運行。但是我已經使用netstat檢查了資源監視器和cmd,看看服務是否在監聽端口,並且是。我還將服務包含在防火牆例外中,所以我不確定爲什麼在嘗試連接到服務器應用程序時不斷收到此錯誤。

任何想法?

+0

您也可以提供像netstat的,資源監視器等... – Saravanan 2013-05-12 16:58:01

+0

@saravanan給出常見的檢查列表中的統計數據,你這是什麼意思的統計數據?對不起,很困惑。你的意思是截圖或證據? – 2013-05-12 17:01:16

回答

2

Dns.GetHostEntry(IPAddress.Loopback).HostName返回機器的主機名稱。當您將主機名傳遞給TcpClient時,它將使用Dns.GetHostAddresses(hostName)將其解析爲一個或多個IP地址。這包括您計算機的公共和鏈接本地IP地址(例如192.168.15.4),但不包括回送地址(127.0.0.1)。

所以你的客戶端試圖連接到你的機器的任何非回送地址,而你的服務器只在迴環地址上進行偵聽。因此,不能建立連接。

解決方案:連接到服務器正在監聽的同一端點。

IPEndPoint endPoint = new IPEndPoint(IPAddress.Loopback, 5152); 

TcpListener listener = new TcpListener(endPoint); 

TcpClient client = new TcpClient(); 
client.Connect(endPoint); 
+0

我試過了,但是我遇到了問題。 我在不同的項目中有服務器和客戶端表單,所以我只是將客戶端表單導入到服務器項目中,只是爲了使事情更簡單。 但我有此錯誤: 每個套接字地址(協議/網絡地址/端口)只有一個用法是正常允許 我敢肯定,我知道這意味着什麼,但不知道爲什麼,我得到它。我只按照你的指示。 – 2013-05-12 17:34:34

+0

哎呀,固定.... – dtb 2013-05-12 18:00:29

相關問題