2013-05-20 53 views
0

我試圖尋找類似的問題,但我不能,因爲我不知道如何發音這個問題。我怎樣才能使一個套接字連接非本地?

連接我的服務器代碼是...

server_Listener = new TcpListener(7778); 
server_Listener.Start(); 


while (true) 
{UserSocket user = new UserSocket(); 

    try 
    { 
     user.client = server_Listener.AcceptSocket(); 

    } 
    catch 
    { 
     break; 
    } 

    if (user.client.Connected) 
    { 

     user.server_isClientOnline = true; 
     this.BeginInvoke((MethodInvoker)(delegate() 
     { 
      textBox1.AppendText("client connected\n"); 

     })); 


     user.server_netStream = new NetworkStream(user.client); 

的UserSocket類有一個插座(變量名客戶端),以及一個NetStream(server_netStream)去接收和處理來自客戶端發送數據包的數據。

我的問題是,這對本地連接工作得很好,但它不工作非本地。

我試圖使用我的筆記本電腦和我的朋友的訪問這臺服務器,但他們沒有工作。

雖然...不是一個錯誤,但它只是無法接收連接。

我的代碼錯了嗎?或者有沒有一種獲得非本地連接的新方法?

+0

「非本地」是指'通過互聯網'還是同一個域/工作組內的其他計算機? –

+0

您是否打開了服務器防火牆中的端口,以允許網絡上的其他計算機訪問您的應用程序? –

+0

你會看到這個http://stackoverflow.com/questions/8195421/connecting-sockets-over-internet-network-fails?rq=1 – Alyafey

回答

0

它可能是您的機器上的防火牆或您的網絡上的其他問題。你可能想嘗試Wireshark (http://www.wireshark.org/),看看你是否可以通過這種方式收集任何信息。

+0

非常感謝..!還評論我的問題的傢伙!我看到通過這些鏈接,並意識到我使用路由器,並沒有修改我的防火牆..我仍然沒有得到什麼端口轉發(雖然我知道一個簡單的方法來做到這一點),但也許我會運行更多的測試。 – March3

+0

端口轉發是指數據包進入您的路由器或防火牆,以指定的IP和端口組合爲目的地,路由器或防火牆將數據包轉發到內部網絡上的其他IP和/或端口。 – heartlandcoder

+0

在這個問題上仍然有一些麻煩。我的服務器程序監聽端口7778〜7780。端口是由我的路由器的配置提供的,我可以設置一個虛擬ip(默認是我正在訪問配置菜單的計算機)的內部端口到外部端口。我把我的端口7778〜7780設置到了外部端口7778〜7780,但它似乎並沒有工作。我仍然想念任何港口前進的概念? – March3

相關問題