2016-08-21 9 views
2

현재 IP 주소를 통해 서버 측에 연결하고 있지만 서버 컴퓨터의 IP 주소를 지정할 필요가 없습니다. 어쨌든 나는 단지 현재 서버 소켓이 네트워크에서 열려 있고 클라이언트 측에서 연결되어 있음을 감지 할 수 있습니까?소켓 서버 및 소켓 클라이언트 java - 다른 컴퓨터에있는 클라이언트의 서버 감지

server = new ServerSocket(1234,100); 

및 클라이언트 측 :

서버가 동일한 네트워크에 항상 경우
connection = new Socket(InetAddress.getByName("someIpAddress"),1234); 

답변

2

, 당신은 항상에 UDP 브로드 캐스트를 사용 할 수

내가 서버에 대한 쓰기 것입니다 서비스를 감지하십시오.

서버는 브로드 캐스트를 수신 한 다음 회신하여 IP 주소를 보냅니다.

서버와 클라이언트가 서로 다른 네트워크에 있고 중간에 최소한 하나의 라우터가있는 경우 클라이언트에서 서버를 "검색"할 수있는 방법이 없습니다.

+0

OP는 특히 java (해당 태그를 확인하십시오)에 관심이 있습니다. 저는이 접근법이 그가 제 3 자 도구를 사용하여 당신이 답안으로 추가 한 것을 성취하기 위해 직접적으로 도움이 될 것이라고 생각하지 않습니다. –

+0

@Am_I_Holpful Java에 익숙하지 않지만, Java에서 UDP 소켓을 만들 수있는 방법이 없다고 말하고 있습니까? 아니면'SO_BROADCAST' 소켓 플래그를 설정하겠습니까? –

+0

저는 답변의 마지막 단락에 더 관심이 있습니다 (라우터와 게이트웨이가 일반적으로 브로드 캐스트 메시지를 전달하지 않는 이유). 나는 그것이 가능하지 않다는 말은 아니다. 하지만 C와 달리 마지막 섹션을 만들기 위해 외부 라이브러리를 사용해야 할 수도 있습니다. –

1

나는 서버 서버의 IP 주소를 지정할 필요가 없기를 원합니다. 어쨌든 난 그냥 현재 serversocket 열려있는 네트워크에서 발견하고 clientside에서 연결할 수 있습니까? 그런 다음 서버 소켓이 알려진 포트에서 실행되는 매우 성가신 작업입니다 것을 감지, 주어진 네트워크에있는 서버에 대한 알 수없는 경우

  1. :

두 측면 아래에 설명되어 있습니다 . Java SE는 의 힘을 자동으로 갖지 않습니다.은 X 포트에서 청취하는 서버 소켓이 네트워크에서 어떤 시스템인지를 결정합니다. 같은 목표를 달성하려면 타사 도구가 필요합니다. 이를 결정하기위한 히트 앤 트라이얼 기반 접근 방식을 사용할 수 있습니다.

  • 또 다른 점은 서버의 호스트 이름 (예 : 코드의 someIpAddress.com)을 알고 있으면이 경우 IP 주소를 가져 오는 호스트 이름 해석기로 연결된다는 것입니다. 건네받은 호스트 명

    클라이언트의/etc/hosts 파일에서 서버 호스트 이름 및 IP에 대한 매핑을 가질 수 있습니다. 또는 요청을 IP로 리디렉션하는 DNS 서버를 가질 수 있으며 X 포트에서 수신 대기중인 서버에 연결할 수 있습니다.