只需在Java中打开一个端口

时间:2013-01-20 00:25:45

标签: java sockets networking upnp

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

我对java.net Socket类及相关内容非常熟悉。我担心阻止连接的路由器/防火墙。我需要做的就是打开一个端口以使用Java STL套接字类。

我被告知要调查朋友使用upnp,并使用Cling建议另一个关于upnp的stackoverflow问题。作为一个网络编程新手,Cling似乎有点矫枉过正(而且我还不够先进以完全理解手册)。

我很抱歉,如果我提出错误的问题,查找错误的地方,等等。我想要做的就是连接两台机器来回发送一些浮动,而不必手动进入我的路由器并转发端口。

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

2 个答案:

答案 0 :(得分:3)

首先要做的是:在Java中没有“STL”这样的东西。您可能指的是基本的Java SDK。

其次,你要求“简单的手段”来执行一项操作,从网络的角度来看,这根本不是微不足道的。查看您的某个程序(程序A)必须执行的最基本任务:表示其“目标”的网络位置(程序B)。如果程序B在路由器后面,做什么你知道程序B的网络位置?没有。你所知道的只是路由器的地址。

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

对于由NAT分隔的程序,唯一明智的做法是使用UPnP。如果Cling有点矫枉过正,请尝试weupnp之类的内容。

但是没有免费的午餐。

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

答案 1 :(得分:0)

我会仔细研究以下教程:http://www.giantflyingsaucer.com/blog/?p=224

这里的想法是,名为xsocket的库会创建在新信息到达时触发的事件。