2009-02-13 239 views
3

我正在使用C#編寫一個簡單的hello world TCP/IP客戶機服務器應用程序,但無法讓我的客戶機連接。任何人都可以提供任何其他疑難解答步驟我開始江郎才盡......由於目標機器主動拒絕,因此無法建立連接

這裏是代碼的有關章節:

服務器:

Console.Out.WriteLine("About to bind address"); 
IPAddress ipAd = IPAddress.Parse("127.0.0.1"); 
Console.Out.WriteLine("Choose a port to bind..."); 

String port = Console.In.ReadLine(); 
int iPort = Int32.Parse(port); 

TcpListener myList = new TcpListener(ipAd, iPort); 

myList.Start(); 

Console.WriteLine("The server is running at: "+myList.LocalEndpoint); 
Console.WriteLine("Waiting for a connection....."); 

Socket s = myList.AcceptSocket(); 
Console.WriteLine("Connection accepted from " + s.RemoteEndPoint); 

客戶端:

Console.Out.WriteLine("enter address: "); 
string address = Console.In.ReadLine(); 
Console.Out.WriteLine("enter port: "); 
int port = Convert.ToInt32(Console.In.ReadLine()); 

TcpClient tcpclnt = new TcpClient(); 
Console.WriteLine("Connecting....."); 

Console.Out.WriteLine("Address: " + address + ":" + port); 
tcpclnt.Connect(address, port); 

我能從客戶端計算機ping服務器,但是我無法使用綁定的端口telnet到服務器。我嘗試了各種端口(少數在8000和40000左右)。我已在兩個系統上禁用Windows防火牆。系統連接到不在互聯網上的路由器。我嘗試了使用和不使用端口轉發設置將給定端口上的傳入請求轉發到服務器計算機,但沒有任何效果。

,我已經能夠捕獲唯一的例外是由客戶端拋出:

無連接可以作出,因爲 目標機器積極地拒絕它 。

我檢查了一個InnerException但似乎沒有 - 這是基本的例外。這是對的嗎?

不知道還有什麼我應該看 - 任何其他故障排除步驟將是有益的。

謝謝!

回答

5

上面的代碼監聽請求從環回地址來傾聽。這將有效地只監聽該網絡上的連接,並且該網絡僅包含您的計算機。

您是否嘗試過偵聽綁定到網絡的地址?在本地網絡上,它應該是類似於192.168.x.x或10.x.x.x的東西

+0

我應該剛剛問過你 - 首先就是這樣。任何想法爲什麼它有所作爲? – 2009-02-13 18:55:58

+1

您的機器同時坐在多個IP網絡上,在您的情況下,環回和本地網絡。你明確要求只聽127.0.0.1,而127.0.0.1/32上的唯一一臺機器是你的。機器可以連接到自己(通過127.0.0.1/32),但沒有其他人可以。 – Coincoin 2009-02-13 20:45:24

3

嘗試netstat -al你的機器上(確切的命令行Windows和UNIX之間變化),看看服務器的端口

+0

不錯的想法 - 已經試過這個,它聲稱預期的端口是綁定和傾聽! – 2009-02-13 18:37:22

1

爲什麼不使用.NET Remoting?它比做TCP/IP客戶端服務器更好。您可以在對象之間傳遞消息。

+0

是我做了一些複雜而值得我認爲我會採取你的建議,但是我正在寫atm *需要*的軟件是痛苦的簡單,以便適合我們。另外我不需要來回傳遞物體。我會記住壽! – 2009-02-13 19:05:48

1

您是否曾嘗試在同一臺計算機上運行客戶端服務器以確保首先進行連接?除此之外,嘗試使用分配的路由器或運行服務器的機器的靜態IP與綁定到環回。

9

我以前碰到過這個。訣竅是綁定到0.0.0.0而不是127.0.0.1。當綁定到127.0.0.1時,服務器將只接受來自本地主機的連接。綁定到0.0.0.0它將接受所有請求。

您也可能想從客戶端獲得主機,並查看它認爲正在打開的端口。

編輯:如果你硬編碼機器的IP地址在其中,監聽器將只偵聽該網絡接口。如果您使用0.0.0.0,監聽器將監聽所有可用的網絡接口。這包括您的計算機和USB連接的手持設備之間的接口,第二塊網卡或VPN鏈接。

相關問題