2012-10-03 4 views
0

mysql이 실행 중인지 여부를 확인하기 위해 java에서 ServerSocket을 사용했습니다. 실행 중이 아니면 사용자에게 mysql 서버를 실행 시키십시오. 그러나 일부 사용자는 mysql이 실행 중이지만 오류 메시지가 표시되는 것을 불평합니다. 그것은 오직 macos에서 발생합니다. 내가 찾는 것은.macos에서 포트 바인딩

자바 코드 : false를 동일 반환

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에 나는 127.0.0.1 반환 true로 설정합니다. localhost, 127.0.0.1은 다음과 같이 동작합니다. 그것은 오직 macos에서 발생합니다. 나는 my.cnf bindaddress 문제가 아니라고 생각합니다. 내가 명령 프롬프트에서 체크했기 때문에

mysql -uroot -hlocalhost 
mysql -uroot -h127.0.0.1 

모두가 작동합니다.

Netstat와

맥 OS

tcp4  0  0 *.3306     *.*     LISTEN 

tcp  0  0 127.0.0.1:3306   0.0.0.0:*    LISTEN 

tcp4와 TCP 사이에 어떤 차이가 있습니까 O를

다른?

왜 그런가?

+0

왜 이것을 위해서'ServerSocket'을 사용하는지 이해할 수 없습니다. 'Socket'을 포트 3306에 열려고 시도하십시오. 성공하면 MySQL이 실행 중입니다. 그렇지 않은 경우. – EJP

답변

0

두 예제는 서로 다른 인터페이스에 효과적으로 바인딩됩니다. INADDR_ANY은 특정 어댑터에 대한 바인딩을 방지하지 않습니다.

OSX MySQL이보고 된 '기타 Os'과 정확히 동일하게 구성되면 예상대로 작동합니다.