【发布时间】:2011-05-27 09:30:30
【问题描述】:
这是我在这里的第一个问题,我会尽力提供尽可能多的信息。
我的 PC 上安装了 Apache 2.2 的本地安装。我默认绑定到端口 100(不要问我为什么)。当我运行 Apache 时,我无法创建端口为 100 的套接字服务器,因为该端口已在使用中。我想要做的是在我正在编写的 Java 服务器中复制此功能。
目前,我创建了一个这样的套接字服务器:
ServerSocket srv = new ServerSocket(100);
问题是,这不会阻止其他应用程序使用此端口。我可以运行我的 Java 应用程序的多个副本,甚至在此之后启动我的 Apache 服务器。我希望 java Server Socket 模仿 Apache 的行为并阻止其他应用程序绑定到所选端口。
我尝试使用 Google,我唯一能找到的是 http://www.dreamincode.net/forums/topic/124376-block-port/,这意味着创建如上所示的套接字服务器应该阻止该端口在其他应用程序中使用。
我使用的是 Windows 7 Ultimate-64bit、NetBeans IDE 6.9.1 和 Java 1.6.0_23。
感谢用户658991,
似乎在客户端连接后或除非我调用 ServerSocket.accept(); 后端口才会被阻塞;
try
{
ServerSocket server = new ServerSocket(12345);
System.out.println("Socket Server Established on port " + server.getLocalPort());
server.accept(); // Code Stops here until connection is completed.
// Do Stuff
}
catch(IOException e)
{
System.out.println("Socket Server Connection Failed!");
System.out.println(e);
System.exit(-1);
}
【问题讨论】:
-
你真的确定服务器套接字被创建并打开了吗?一旦打开,操作系统会负责防止其他应用程序重用该端口。
-
在 Unix 中只有 root 可以绑定到端口号
标签: java port bind serversocket