我知道这个话题已被问过,我已经使用了很多来自互联网的帖子,比如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);
}
}
答案 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找到一些信息