java で ServerSocket を使用して、mysql が実行されているかどうかを確認しました。実行されていない場合は、mysql サーバーを実行してくださいとユーザーに促しました。しかし、一部のユーザーは、mysql が実行されているにもかかわらず、エラー メッセージが表示されると不満を漏らしました。これは macos でのみ発生します。私が見つけたのは.
Java コード :
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;
}
システムプロパティbindaddress
をlocalhost
設定すると false が返され、同じように設定すると127.0.0.1
true が返されます。localhost 、 127.0.0.1 がこのように動作する理由は同じです。これは macos でのみ発生します。my.cnf
bindaddressの問題ではないと思います。コマンドプロンプトでチェックインしたので
mysql -uroot -hlocalhost
mysql -uroot -h127.0.0.1
どちらも作品です。
ネットスタット
マックOS
tcp4 0 0 *.3306 *.* LISTEN
その他のOS
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
tcp4 と tcp に違いはありますか?
なぜそれが起こるのですか?