Java macos上的端口绑定
我使用java中的ServerSocket检查mysql是否正在运行。如果它没有运行,我会提示用户请运行mysql服务器。但是,我的一些用户抱怨说,尽管mysql正在运行,但我们收到了错误消息。这只发生在macos。我发现的是 Java代码:Java macos上的端口绑定,java,sockets,osx-server,Java,Sockets,Osx Server,我使用java中的ServerSocket检查mysql是否正在运行。如果它没有运行,我会提示用户请运行mysql服务器。但是,我的一些用户抱怨说,尽管mysql正在运行,但我们收到了错误消息。这只发生在macos。我发现的是 Java代码: public static boolean isPortFree(int port) { if(port <= 0) { return false; } ServerSocket sock = null
public static boolean isPortFree(int port)
{
if(port <= 0)
{
return false;
}
ServerSocket sock = null;
try
{
String bindAddress = System.getProperty("bindaddress", "127.0.0.1");
sock = new ServerSocket(port,0,InetAddress.getByName(bindAddress));
}
catch(Exception ex)
{
return false;
}
finally
{
if (sock != null)
{
try
{
sock.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
return true;
}
两者都是作品
Netstat
马科斯
其他操作系统
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
tcp4和tcp之间有什么区别吗
知道为什么会这样吗?这两个示例有效地绑定到不同的接口:
INADDR\u Any
不阻止绑定到特定适配器
如果在OSX上MySQL的配置与您报告的“其他操作系统”完全相同,它将按预期工作。我不明白您为什么要首先为此使用
ServerSocket
。只需尝试打开一个插槽
至端口3306即可。如果成功,MySQL正在运行。如果不是,就不是。
tcp4 0 0 *.3306 *.* LISTEN
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN