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

时间:2011-02-26 15:14:20

标签: java sockets

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

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

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

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

Socket kkSocket = new Socket(ipAddress, 3333);

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

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

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

谢谢!

4 个答案:

答案 0 :(得分:9)

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

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

DNS的一个问题是,你需要一个“静态IP”,这听起来就像是:一个不会改变的IP地址,这正是你没有的。

那么,你能做什么?

  1. 您可以从ISP购买静态IP帐户(相当昂贵)
  2. 你可以在互联网上使用一些代理( 具有静态IP并且愿意来回反弹你的数据包的机器 - 我不知道任何服务这对你来说;你可以写一个并把它放在亚马逊网络服务或谷歌应用引擎上,这两个都可以在你的使用水平上免费,但它们会很慢,因为每个试图穿过你的客厅的包都会必须经过弗吉尼亚州的一些数据中心。
  3. 你可以继续做你正在做的事情,查看你机器的网络配置。
  4. 您可以通过让服务器程序查找自己的IP地址并将其打印出来,然后手动将其输入服务器,从而加快(3)速度。
  5. 你可以像谢尔盖所说的那样使用DynDNS(这是“正确的”解决方案,因为它非常通用,设置起来可能有点复杂)。
  6. 您可以使用multi-casting
  7. 多播是一个有趣的解决方案,它可能适合您。这个想法是,当你的服务器启动时,它会向网络宣布:“我在这里,我正在提供X服务器,这是我的IP地址,请跟我说说。”问题是,多人演员不会离开你的起居室。显然,如果每个多播都传播到互联网上的每台计算机上,整个事情就会崩溃,所以你的路由器会忽略而不是路由多播数据包。这可能是也可能不是你的交易破坏者。 编辑重新阅读您的问题,我认为 是您的交易破坏者。我会选择#5,但要注意可能存在路由问题(防止服务器知道其他计算机可以找到的地址的地址转换)或防火墙问题(也就是说,您的ISP可能会阻止您的服务器即使地址正确,也可以接收传入的数据包。)

答案 1 :(得分:1)

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

防火墙会很乐意阻止连接,或者不时地将其删除。

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

对于一个简单的应用程序,我建议您查看comet technology,您的客户端可以在其中与共享服务器建立http连接。然后,服务器可以在它们之间桥接命令。

html5也会将websocket protocol带到桌面。

答案 2 :(得分:1)

  

右键单击,我获得了IP地址   关于连接,状态,支持。

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

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

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

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

  

此外,是否可以获得修复   我可以使用的计算机名称   而不是输入IP地址,如   每次连接时都会发生变化   使用我的手机上网?

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

答案 3 :(得分:0)

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

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

相关问题