java - 只需在 Java 中打开一个端口

标签 java sockets networking upnp

我正在编写一个程序,需要两台机器通过 TCP 相互通信。

我对 java.net Socket 类和相关事物有(非常)基本的了解。我担心路由器/防火墙会阻止连接。我需要做的就是打开一个端口,以便使用 Java STL 套接字类。

friend 告诉我研究使用 upnp,另一个关于 upnp 的 stackoverflow 问题建议使用 Cling .作为一个网络编程新手,Cling 对此似乎有些矫枉过正(而且我还不够先进,无法完全理解该手册)。

如果我问错问题,找错地方等,我很抱歉。我只想连接两台机器来回发送一些 float ,而无需手动进入我的路由器和转发端口。

STL 中是否有任何自动执行此操作的内容,或任何简单的库?

最佳答案

首先:Java 中没有“STL”之类的东西。您可能指的是基本的 Java SDK。

其次,您要求“简单的方法”来执行一项操作,从网络的角度来看,这根本不是微不足道的。查看您的程序之一(程序 A)必须执行的最基本任务:指示其“目标”(程序 B)的网络位置。如果程序 B 在路由器后面,您对程序 B 的网络位置了解多少?没有。您所知道的只是路由器的地址。

与防火墙相同。您担心防火墙会阻止您的连接吗?好吧,如果您的防火墙很好,那么您希望它们阻止除预先批准的连接之外的所有连接。

对于被 NAT 分隔的程序,唯一明智的方法是使用 UPnP。如果 Cling 是一种矫枉过正,请尝试类似 weupnp 的方法.

天下没有免费的午餐。

如果程序 A 和程序 B 之间没有网络“屏蔽”设备(例如路由器),那么使用 Java SDK 进行非常简单的 TCP/IP 编程应该就可以了。如果一路上网络设备,您将不得不通过配置设备或使用 UPnP 来应对它们。

关于java - 只需在 Java 中打开一个端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14420439/

相关文章:

Java - 未使用字段的值

java - 如何删除 'Assignment of Parameter ' 变量'不允许'

sockets - Socket.io:用户是否可以更改收听 channel ?

amazon-web-services - 将公共(public) IP 与具有多个网络接口(interface)的 EC2 实例关联

c - 如何在 Linux 内核中注册 UDP 端口并为此端口范围创建 Hook

java - 将文本文件放在Android目录中的位置

java - 无法使用 Apache Commons Lang 将双数组转换为字符串

android - 谷歌计算引擎+套接字

c - 服务器在处理完一个请求后立即终止

networking - 在 SSH 隧道上使用 Mosh,中间有一个跃点