【发布时间】:2011-07-04 21:40:12
【问题描述】:
我已经为此苦苦挣扎了一整天,希望有人能帮助我。
我的问题很简单:我希望通过互联网将数据(主要是简单的命令)从一台 PC 传输到另一台 PC。
当两台计算机都连接到我的家庭路由器时,我已经能够使用 Java 中的套接字来实现这一点。然后,我使用两部不同的手机将两台计算机连接到互联网,并尝试再次传输数据。我用的是手机,因为它提供了直接到互联网的路由,如果我使用我的路由器,我必须设置端口转发,至少我是这么理解的。
我认为问题在于我设置客户端套接字的方法。我用过:
Socket kkSocket = new Socket(ipAddress, 3333);
其中 ipAddress 是运行服务器的计算机的 IP 地址。我通过右键单击连接、状态、支持来获取 IP 地址。那是要使用的正确 IP 地址还是我在哪里可以获得服务器的地址?另外,是否可以为我的计算机获取一个固定名称,而不是输入 IP 地址,因为每次我使用手机连接到互联网时,IP 地址都会改变?
或者,是否有更好的方法来解决我的问题,例如使用 http,如果有,我在哪里可以找到更多相关信息?
编辑: 是否有可能让服务器程序在某处互联网上的服务器上运行。然后,我的原始服务器将成为向该服务器发送信息的客户端。然后,该服务器会将这些信息传递给我原来的客户端,反之亦然。这样,我的计算机的 IP 地址就无关紧要了,因为我只需要知道托管在网络上某处的服务器的地址。这似乎是一个更好的解决方案?我从哪里开始实施这样的解决方案?
谢谢!
【问题讨论】:
-
您的问题更多地与互联网协议和通信设置的管理有关,而不是与编程有关。最好在 ServerFault.com 上询问。顺便说一句,你的问题是多层次的。在家庭甚至公司网络上运行相当容易,但是当您进入野外时,您必须考虑防火墙、DNS、ISP(通常不允许服务器流量)等。如果您想在套接字级别编码,你一定要从内而外地学习 TCP/IP。没有逃避它。
-
关于您在编辑中讨论的策略。有一种非常简单的入门方法:Google App Engine。您必须了解一点关于 servlet 的知识和一点点关于 Google 特定数据存储的知识,但总的工作应该不到一个小时。
-
@Malvolio。谢谢,这听起来是个好主意。如果我创建自己的服务器来执行此操作,会比使用 google 应用引擎更困难吗?
-
问题是,你需要找一个主机。你必须找一个拥有数据中心的人,让你使用电脑。有很多商业机构会为了钱去做,甚至还有一些其他(部分)免费的,包括Amazon Web Services,您甚至可以建立自己的数据中心,只需一个静态 IP 和一个未使用的Linux 盒子。 GAE 是最简单的,大约一个小时的工作。在 AWS 的免费 Beanstalk 服务上,可能需要两个小时。这些是我这个月自己尝试过的唯一一个,但其他的可能是可比的。