如何通过Internet在两台计算机之间发送数据

我一整天都在努力解决这个问题,我希望有人可以帮助我。

我的问题很简单:我希望通过互联网将数据(主要是简单的命令)从一台PC传输到另一台PC。

当两台计算机连接到我的家用路由器时,我已经能够使用Java中的套接字来实现这一点。 然后,我使用两个不同的移动电话将两台计算机连接到互联网,并尝试再次传输数据。 我使用移动电话,因为这提供了到互联网的直接路由,如果我使用我的路由器,我必须设置端口转发,至少,这是我理解它。

我认为问题在于我设置客户端套接字的方法。 我用了:

Socket kkSocket = new Socket(ipAddress, 3333); 

其中ipAddress是运行服务器的计算机的IP地址。 我通过右键单击连接,状态,支持来获取IP地址。 这是正确使用的IP地址还是在哪里可以获取服务器的地址? 此外,是否可以为我的计算机获取一个固定的名称,而不是输入IP地址,因为每次使用我的手机连接到互联网时这都会改变?

或者,有没有更好的方法来解决我的问题,如使用http,如果是这样,我在哪里可以找到更多相关信息?

编辑:是否有可能让服务器程序在互联网上的某个服务器上运行。 我的原始服务器将是一个向该服务器发送信息的客户端。 然后,此服务器将此信息传递给我的原始客户端,反之亦然。 这样,我的计算机的IP地址无关紧要,因为我只需要知道在网络上某处托管的服务器的地址。 这似乎是一个更好的解决方案吗? 我从哪里开始实施这样的解决方案?

谢谢!

当您连接到服务于StackOverflow的服务器时,您是否输入了IP地址? 它是64.34.119.12,如果那慢跑你的记忆。

你可能没有。 你可能输入了“stackoverflow.com”。 有一个巨大的,复杂的,聪明的, 在某些方面 ,实施不当的系统称为DNS ,它将合理的和人类可读的名称转换为IP地址。

但是,DNS存在的一个问题是,您需要一个“静态IP”,这正是它听起来的样子:一个不会改变的IP地址,这正是您没有的。

所以,你可以做什么?

  1. 您可以从ISP购买静态IP帐户(相当昂贵)
  2. 你可以在互联网上使用一些代理服务器(一台拥有静态IP且愿意来回反弹你的数据包的机器 – 我不知道有任何服务为你做这个;你可以写一个并放它可以在amazon web services或谷歌应用引擎上使用,这两种方式都可以免费使用,但它们会很慢,因为每个试图穿过客厅的数据包都必须经过一些数据中心才能通过弗吉尼亚州)。
  3. 你可以继续做你正在做的事情,查看你的机器的网络配置。
  4. 您可以通过让服务器程序查找自己的IP地址并将其打印出来,然后手动将其输入服务器,从而加快(3)速度。
  5. 你可以像谢尔盖所说的那样使用DynDNS(这是“正确”的解决方案,因为它非常通用,设置起来可能有点复杂)
  6. 您可以使用多重铸造 。

多播是一个有趣的解决方案,它可能适合您。 这个想法是,当你的服务器启动时,它向网络宣布:“我在这里,我正在提供X服务器,这是我的IP地址,请跟我说说。” 问题是,多播不会离开你的起居室。 显然,如果每个多播都传播到互联网上的每台计算机上,整个事情就会崩溃,所以你的路由器会忽略而不是路由多播数据包。 这可能是也可能不是你的交易破坏者。 编辑重新阅读你的问题,我认为这对你来说一个交易破坏者。 我会选择#5,但要注意可能存在路由问题(防止服务器知道其他计算机可以找到的地址的地址转换)或防火墙问题(也就是说,您的ISP可能会阻止您的服务器从接收传入的数据包,即使地址是正确的)。

使用与3333之类的端口的直接套接字连接通常很复杂,因为网络配置不同。

防火墙会很乐意阻止连接,或不时杀死它。

保持双向连接可能是一个很大的问题。 SIP协议正在努力解决这类问题。

对于一个简单的应用程序,我建议您研究一下彗星技术 ,您的客户可以在其中与共享服务器建立http连接。 然后,服务器可以在它们之间桥接命令。

html5还会将websocket协议带到表中。

我通过右键单击连接,状态,支持来获取IP地址。

不确定“支持”部分,我现在不在Windows机器上,但我认为在Windows上找出IP地址最简单可靠的方法是从命令行运行“ipconfig”( Win + R,键入“cmd”,然后在打开的窗口中键入“ipconfig”。 当然,这应该在服务器端完成。

但问题是,根据ISP的不同,您的IP地址可能不在Internet内,而是在本地ISP网络中(所谓的NAT)。 在这种情况下,你需要使用某种称为TCP打孔的黑魔法,这种打法非常复杂并且无法保证工作。 你可以通过查看它来确定你的地址是否是本地的。 对于IPv4,本地地址几乎总是像10.xxx或172.16-31.xx,或192.168.xx。不了解IPv6。

您还可以访问www.whatismyip.com等特殊网站查看您的IP。 如果他们告诉你的地址与你通过运行“ipconfig”或查看连接属性看到的地址不同,那么你几乎肯定会在NAT后面(或者你的ISP正在使用透明代理,但这种情况很少见)。

如果您直接连接到Internet(没有本地地址和NAT),那么您还应检查是否有任何防火墙软件,并将其配置为允许连接到您使用的端口,或确保它在“询问用户” (而不是“默默拒绝”)模式,或者只是完全禁用它(这可能会使您的计算机面临风险,特别是如果没有防病毒软件或系统不是最新的)。

此外,是否可以为我的计算机获取一个固定的名称,而不是输入IP地址,因为每次使用我的手机连接到互联网时这都会改变?

是的,这是可能的。 有一个名为DynDNS的东西,有DynDNS提供商,如DynDNS.com ,你可以免费获得三级域名(如mycoolpc.dyndns.org)。 您必须在PC上安装和配置一些DynDNS客户端,每次更改时都会告诉DynDNS服务器它的新IP。 我对使用特定客户端一无所知,因为我正在使用家用路由器内置的客户端。

不需要为此编写网络代码,除非它真的漂浮在你的船上。 看看SCP。 http://amath.colorado.edu/computing/software/man/scp.html 。 有一个Windows实现,你可以下载putty(windows ssh客户端),它在大多数Linux发行版上。 或者,您可以在一台或两台计算机上设置FTP或SSH服务器。

“我可以使用的固定名称,而不是输入IP地址”将是一个域名,这些可以在网上购买几块钱。