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

Joh*_*han 6 java sockets

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

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

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

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

Socket kkSocket = new Socket(ipAddress, 3333);
Run Code Online (Sandbox Code Playgroud)

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

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

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

谢谢!

Mal*_*lio 10

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

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

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

所以,你可以做什么?

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

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