2014-11-08 57 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