通过互联网传输数据

时间:2014-11-08 18:40:56

标签: c# networking data-transfer

我知道这个话题已被问过,我已经使用了很多来自互联网的帖子,比如codeproject,stackoverflow,但我仍然无法在2台计算机之间传输数据,而不是局域网网络。

在LAN上传输或通过互联网进行传输是否有所不同?我必须有临时服务器来完成这项任务吗?

我的程序正在开发LAN网络,但是当我尝试在WAN网络中测试程序时,我在远离我的朋友的计算机中设置服务器(接收),然后在我的计算机中,在客户端程序中,我更换了局域网的IP由我朋友的计算机的IP,但它没有用。我是否误解了任何事情?

如果您不了解我,请给我解决方案的链接或教我如何在2台局域网计算机之间传输数据。非常感谢,抱歉我的英语不好。

代码:(仅进行连接)

接收:(我在我朋友的机器上设置了这个)

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);
        }
    }

2 个答案:

答案 0 :(得分:1)

如上所述,如果没有实际的代码示例,就无法做出具体的陈述。

也就是说,代码在LAN上工作但不通过Internet的常见原因是连接的服务器端位于代理,NAT路由器或防火墙之后。

如果服务器主机运行了防火墙,则必须确保将防火墙设置配置为允许网络流量通过您期望的端口。使用Windows防火墙时,默认情况下,Windows将在您第一次运行未授权程序时显示提示,允许您授予访问权限。 Windows上的不同防火墙软件,当然还有其他操作系统上的不同防火墙,可能也可能不同。

同样,如果服务器主机使用NAT路由器进行Internet连接(通常用于住宅和中小型企业的Internet连接),则NAT路由器的端口转发"将需要配置为将给定端口上的入站流量传递到指定的计算机。如果涉及代理服务器,则存在类似的问题。

另请注意,如果涉及NAT路由器或代理,则需要在客户端软件中配置为服务器地址的IP地址用于承载的实际计算机的IP地址服务器进程(将是一个LAN地址),而是NAT路由器或代理服务器使用的面向Internet的地址。

以上所有假设都是IPv4。如果您正在使用IPv6(在Internet上仍然不常见,但某些Internet提供商端到端支持),则代理和NAT问题不应成为问题,但防火墙仍然存在问题。

答案 1 :(得分:0)

您可能必须在两个路由器中为您的程序用于通信的端口设置一些Port Forwarding,以使其在WAN上运行。在LAN中,它更容易,因为它通常对所有端口都是开放的。

如何设置端口转发取决于您的路由器,但可以在http://portforward.com找到一些信息