2012-05-12 72 views
0

我想做一個winforms客戶端/服務器聊天應用程序。我已經有一個客戶端和一個服務器,都工作正常,我可以登錄,發送消息等。問題是,它只適用於我連接到我的本地IP。當我嘗試使用我的外部IP運行的程序,我得到以下錯誤:C/winforms客戶端/服務器聊天程序IP地址問題

"The requested address is not valid in its context". 

也就是說,我能在自己的計算機上的服務器,啓動(例如)3級的客戶,讓他們連接到正在運行的服務器。這基本上意味着我正在跟自己說話。我試圖做的是在我的電腦上運行聊天服務器,讓其他人運行客戶端程序並通過互聯網連接到服務器。

這是一部分,當我進入我的外部IP在那裏我得到一個錯誤:

public void StartListening() 
    { 

     // Get the IP of the first network device, however this can prove unreliable on certain configurations 
     IPAddress ipaLocal = ipAddress; 

     // Create the TCP listener object using the IP of the server and the specified port 
     tlsClient = new TcpListener(ipaLocal, 50702); 

     // Start the TCP listener and listen for connections 
     tlsClient.Start(); <--- THINGS GO SOUTH HERE 

     // The while loop will check for true in this before checking for connections 
     ServRunning = true; 

     // Start the new tread that hosts the listener 
     thrListener = new Thread(KeepListening); 
     thrListener.Start(); 
    } 

林不知道如果我想要做的是可能的嗎?我無法想象它,但我有點不知道如何繼續這個。我是網絡編程的新手,所以任何幫助將不勝感激。

親切的問候, 簡

回答

1

簡,

我覺得你的問題是與你的IP地址設置。這是一個網絡連接問題。您需要外部IP地址,以便外部客戶可以聯繫您的PC。你需要更高級的網絡。 ISP提供的IP地址用於家庭使用。您需要專門的公共IP地址,以便客戶端可以在防火牆之外找到您。這是網絡/ ISP /外部IP問題。

1

您的服務器應用程序需要偵聽指定的本地安裝的NIC上的指定端口上的傳入連接。這就是爲什麼TcpListener始終需要使用IP地址本地創建的原因:因爲它只關心應使用哪個NIC(如果您安裝了多個NIC)。

的MSDN頁面TcpListener還指出它明確:

TcpListener Constructor (IPAddress, Int32) Initializes a new instance of the TcpListener class that listens for incoming connection attempts on the specified local IP address and port number.

外部IP地址是完全不相干的TCP/IP服務器。您可以一路上有許多路由器和網絡設備,然後可以將傳入的連接轉發到您的機器。

只要確保您的防火牆和路由器配置正確,以允許指定端口上的傳入連接。爲此,請啓動TCP/IP服務器以打開端口,然後使用CanYouSeeMe等服務查看是否可以從外部訪問服務器。

關於你的評論(這可以證明在某些配置不可靠的),它顯然是「不可靠的」,當你想想看:一臺筆記本電腦就可以輕鬆擁有比Wi-Fi網絡適配器一個完全不同的IP地址的以太網網絡控制器。您的服務器應用程序應允許用戶選擇使用哪個IP地址,而不是選擇它獲得的第一個地址。