Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何通过internet在两台计算机之间发送数据_Java_Sockets - Fatal编程技术网

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

Java 如何通过internet在两台计算机之间发送数据,java,sockets,Java,Sockets,我已经为此挣扎了一整天了,我希望有人能帮我解决这个问题 我的问题相当简单:我希望通过互联网将数据(大部分是简单的命令)从一台电脑传输到另一台电脑 当两台计算机都连接到我的家庭路由器时,我已经能够使用Java中的套接字实现这一点。然后,我用两部不同的手机将两台电脑连接到互联网,并尝试再次传输数据。我使用移动电话,因为这提供了一条直达互联网的路线,如果我使用路由器,我必须设置端口转发,至少我是这样理解的 我认为问题在于我设置客户端套接字的方法。我用过: Socket kkSocket = new S

我已经为此挣扎了一整天了,我希望有人能帮我解决这个问题

我的问题相当简单:我希望通过互联网将数据(大部分是简单的命令)从一台电脑传输到另一台电脑

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

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

Socket kkSocket = new Socket(ipAddress, 3333);
其中ipAddress是运行服务器的计算机的IP地址。我通过右键单击连接、状态和支持来获得IP地址。这是要使用的正确IP地址还是从哪里可以获得服务器的地址?此外,是否有可能为我的计算机获取一个固定的名称,而不是输入IP地址,因为每次我使用手机连接到互联网时,IP地址都会发生变化

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

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


谢谢

无需为此编写网络代码,除非它真的能让你的船漂浮起来。看看SCP。有一个windows实现,您可以在其中下载putty(windows ssh客户端),它在大多数linux发行版上都有。或者,您可以在一台或两台机器上设置FTP或SSH服务器


“我的计算机的固定名称,可以用来代替输入IP地址”将是一个域名,这些域名可以在线购买,只需几美元。

使用像3333这样的端口的直接套接字连接通常比较复杂,因为不同的网络配置

防火墙会不时阻止或终止连接

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

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

html5也将把这个问题提上议事日程

我通过右键单击获得IP地址 关于连接、状态、支持

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

但是,问题在于,根据ISP的不同,您的IP地址可能不在Internet内,而是在本地ISP网络(所谓的NAT)内。在这种情况下,您需要使用一种叫做的黑魔法,这种魔法非常复杂,不能保证有效。通过查看您的地址,您可以确定您的地址是否为本地地址。对于IPv4,本地地址几乎总是类似于10.x.x.x或172.16-31.x.x或192.168.x.x。我不知道IPv6

你也可以通过访问一个特殊的网站来检查你的IP,比如。如果他们告诉你的地址与你通过运行“ipconfig”或查看连接属性看到的地址不同,那么你几乎肯定是在NAT后面(或者你的ISP使用的是透明代理,但这很少见)

如果您直接连接到Internet(没有本地地址和NAT),那么您还应该检查是否有防火墙软件,并将其配置为允许连接到您使用的端口,或者确保它处于“询问用户”(而不是“静默拒绝”)模式,或者完全禁用它(这可能会使您的计算机处于危险之中,尤其是在没有防病毒软件或系统不是最新的情况下)

还有,有没有可能得到一个固定的 我可以使用的计算机的名称 而不是输入IP地址,如 每次连接到时都会发生变化 用我的手机上网


是的,这是可能的。有一种叫做DynDNS的东西,还有一些DynDNS提供商,比如,你可以免费获得一个三级域名(比如mycolpc.DynDNS.org)。您必须在电脑上安装和配置一些DynDNS客户端,每次更改时,这些客户端都会告诉DynDNS服务器它的新IP。我不知道要使用哪些客户端,因为我使用的是家庭路由器中内置的客户端。

当您连接到提供StackOverflow服务的服务器时,是否键入了IP地址?它是64.34.119.12,如果这能唤起你的记忆

您可能没有。您可能键入了“stackoverflow.com”。有一个庞大、复杂、聪明、实现差的系统,名为,它将合理的、人类可读的名称转换为IP地址

然而,DNS的一个问题是,你需要一个“静态IP”,这正是它听起来的样子:一个不变的IP地址,这正是你所没有的

那么,你能做什么

  • 您可以从ISP购买静态IP帐户(相当昂贵)
  • 你可以在互联网上使用一些代理(一台有静态IP的机器,它愿意来回地跳转你的数据包——我不知道有任何服务可以为你这样做;你可以一次编写一个