0

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;
}

システムプロパティbindaddresslocalhost設定すると false が返され、同じように設定すると127.0.0.1true が返されます。localhost 、 127.0.0.1 がこのように動作する理由は同じです。これは macos でのみ発生します。my.cnfbindaddressの問題ではないと思います。コマンドプロンプトでチェックインしたので

 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 に違いはありますか?

なぜそれが起こるのですか?

4

1 に答える 1

0

2 つの例は、効果的に異なるインターフェイスにバインドしていますINADDR_ANY。特定のアダプターへのバインドを妨げません。

OSX で MySQL が報告された ' Other Os 'とまったく同じように構成されていれば、期待どおりに動作します。

于 2012-10-03T16:53:19.653 に答える