2014-11-08 64 views
1

我知道這個話題已經被問到,我已經使用了很多來自互聯網的帖子,比如codeproject,stackoverflow,但是我仍然不能在2臺計算機之間傳輸數據而不是LAN網絡。通過互聯網進行數據傳輸

在LAN上傳輸還是通過互聯網傳輸有區別嗎?我需要臨時服務員來完成這項任務嗎?

我的程序正在研究LAN網絡,但是當我嘗試在WAN網絡中測試程序時,我在我的朋友的計算機中設置了遠離我的服務器(接收),然後在我的計算機中,用我朋友的電腦的IP替換了局域網的IP,但它不起作用。我誤解了任何東西嗎?

如果您不瞭解我,請給我鏈接解決方案或教我如何在2臺不在LAN的計算機上傳輸數據。非常感謝你,對我英語不好的話感到抱歉。

CODE:(只進行連接)

接收:(我設置此我朋友的機器上)

namespace RecieveFile 
{ 
public partial class Form1 : Form 
{ 
#region Variables 
    private Thread thrDownload; 
    private Stream strLocal; 
    private NetworkStream strRemote; 
    private TcpListener tlsServer; 
    #endregion 
    public Form1() 
    { 
     InitializeComponent(); 
    } 
    private void Form1_Load(object sender, EventArgs e) 
    {    
     thrDownload = new Thread(StartRecieving); 
     thrDownload.Start(); 
    } 
    public void StartRecieving() 
    { 
     try 
     { 
      string hstServer = Dns.GetHostName(); 
      IPAddress ipaLocal = Dns.GetHostEntry(hstServer).AddressList[0]; 
      if (tlsServer == null) 
      { 
       tlsServer = new TcpListener(IPAddress.Any, Convert.ToInt32(29250));     

      } 
      tlsServer.Start(); 

      TcpClient tclServer = tlsServer.AcceptTcpClient(); 
      MessageBox.Show("Connection has been created"); 
     } 
     catch (Exception e) 
     { 
      MessageBox.Show(e.Message); 
     } 
     finally 
     { 
      strLocal.Close(); 
      strRemote.Close(); 
      MessageBox.Show("In finally"); 
      StartRecieving(); 
     } 
    } 
} 
} 

發送:(我成立這個在我的機器)

private void Form1_Load(object sender, EventArgs e) 
    { 
    //171.255.9.234 is my friend's IP 
    //if this ip is a ip of computer in my LAN network, it can work 
     ConnectToSever("171.255.9.234", 29250); 

    } 
public void ConnectToSever(string severIP, int severPort) 
    { 
     tcpClient = new TcpClient(); 
     try 
     { 
      tcpClient.Connect(severIP, severPort); 
      MessageBox.Show("Connection has been created!","Message"); 
     } 
     catch (Exception e) 
     { 
      MessageBox.Show(e.Message); 
     } 
    } 
+1

請顯示代碼,否則這只是爲我們猜測。 – deathismyfriend 2014-11-08 18:43:01

+0

假設通過TCP/IP進行通信,從應用程序代碼的角度來看沒有任何區別。有了這裏提供的信息,沒有人真的能夠告訴你很多,但不管它是服務器故障的更多問題,儘管它們也可能拒絕它。 – 2014-11-08 19:45:28

+0

感謝您的通知,我已經添加了代碼,希望我能得到答案。 – 2014-11-09 02:22:16

回答

0

您可能必須在您的路由器中爲您的程序使用的端口進行通信以使其通過WAN工作,從而在兩個路由器中設置一些Port Forwarding。在局域網中更容易,因爲它通常作爲默認端口向所有端口開放。

如何設置端口轉發取決於你的路由器上,但​​有些信息可以在http://portforward.com

1

如前所述可以發現,沒有實際的代碼示例,它不可能作出具體說明。

也就是說,代碼在LAN上工作但不通過Internet的常見原因是連接的服務器端在代理,NAT路由器或防火牆後面。

如果服務器主機運行防火牆,則必須確保防火牆設置已配置爲允許網絡流量通過您期望的端口。使用Windows防火牆時,默認情況下,Windows會在第一次運行允許您授予訪問權限的未授權程序時顯示提示。 Windows上的不同防火牆軟件,當然,其他操作系統上的不同防火牆可能也可能不起作用。同樣,如果服務器主機使用NAT路由器進行互聯網連接(常用於住宅和中小型企業互聯網連接),則NAT路由器的「端口轉發」將需要配置爲在給定端口到指定的計算機。如果涉及代理服務器,則存在類似的問題。

另請注意,如果涉及NAT路由器或代理,則需要在客戶端軟件中配置爲服務器地址的IP地址是而不是用於託管服務器進程的實際機器的IP地址(這將是一個LAN地址),而是NAT路由器或代理服務器使用的面向Internet的地址。

以上所有都假設IPv4。如果您使用IPv6(在互聯網上仍然不常見,但由某些Internet提供商端到端支持),則代理和NAT問題不應該成爲問題,但防火牆仍然會是問題。

+0

第一次使用該程序時,會出現一個窗口,我選擇了兩個選項(我記得1個允許使用LAN,1個允許公開),是防火牆配置嗎? 有人推薦我關於NAT,但我真的不明白它是什麼。 NAT是解決方案嗎?如果是這樣,我會研究它。 感謝您的通知! – 2014-11-09 02:31:13

+0

是的,那可能是您的防火牆配置。 「NAT」是路由器使用的(可能是你的朋友的路由器)在多臺計算機(或其他設備)之間共享一個互聯網連接。 「NAT」不是解決你的問題的方法;它可能是你的問題(但它是其他問題的解決方案,所以你的解決方案不是擺脫它的解決方案...你的解決方案是正確配置NAT路由器)。 – 2014-11-09 03:49:47

+0

我可以通過在C#中編碼來配置NAT路由器嗎?我想編寫類似於Teamviewer的程序。我發現Teamviewer具有服務「Call over IP」和兩臺機器之間的複製/粘貼容易,它有任何臨時服務器或虛擬機來完成這項任務?我認爲這不是,因爲它是免費的,這就是爲什麼我瞭解套接字,TCP/IP方法,但我找不到解決方案:( – 2014-11-09 04:21:49