2014-11-07 2 views
-1

임의의 시스템에서 이식 가능하도록 디자인 된 프로젝트에서 작업 중이며 ServerSocket을 사용하는 한 컴퓨터에 "서버"유형의 프로그램이 호스팅되고 다른 클라이언트 프로그램이 켜짐 socket을 사용하여 같은 네트워크에있는 "서버"에 연결된 다른 컴퓨터. 클라이언트가 멀티 캐스트 시스템이나 호스트 시스템을 다른 곳에서 사용하지 않고도 서버가 네트워크에있는 곳을 항상 파악하여 모든 로컬 서버가되도록하고 싶습니다. 나는 특정 IP 주소에 ServerSocket을 호스트 할 수 있어요 인상이었고, 나는 여기에 시도 :이 할 수있는 방법이면 그러나 오류특정 IP 주소에서 ServerSocket 호스팅

java.net.UnknownHostException: 192.168.859.672 
at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method) 
at java.net.InetAddress$1.lookupAllHostAddr(InetAddress.java:901) 
at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1293) 
at java.net.InetAddress.getAllByName0(InetAddress.java:1246) 
at java.net.InetAddress.getAllByName(InetAddress.java:1162) 
at java.net.InetAddress.getAllByName(InetAddress.java:1098) 
at java.net.InetAddress.getByName(InetAddress.java:1048) 
at com.pulsepanda.dragon.core.Connection.startServer(Connection.java:30) 
at com.pulsepanda.dragon.core.Connection.<init>(Connection.java:25) 
at com.pulsepanda.dragon.core.Run.main(Run.java:5) 

을 반환

try { 
    InetAddress addr = InetAddress.getByName("192.168.859.672"); 
    serverSocket = new ServerSocket(Integer.parseInt("9532"), 50, addr); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

특정 IP 주소에서 ServerSocket 호스트를 사용하면 제대로 작동합니까? 내가 뭘 잘못하고 있습니까? 이것이 올바른 일이 아니라면 두 가지 질문이 있습니다 : 멀티 캐스트 시스템없이 로컬에서만이 작업을 수행 할 수있는 방법은 무엇입니까? 2) 내가 실제로 사용하고있는 것은 무엇입니까?

감사합니다.

+0

당신은 시스템 사용자에 구성되어있어 IP 주소에 서버 소켓을 바인딩 할 수 있습니다 계속 달리고있어. – nos

+0

시스템이란 네트워크 또는 호스트 컴퓨터를 의미합니까? – PulsePanda

+0

시스템 = 응용 프로그램이 실행되는 컴퓨터. – nos

답변

0

DNS를 사용하는 방법입니다. 서버의 각 인스턴스는 동일한 비 한정 호스트 이름을 가질 수 있습니다. 로컬 DNS 서버는 해당 서버의 IP 주소를 사용자가 직접 변환합니다.

+0

그 휴대용 것입니다 프로그램? 예를 들어, 만약 내가 그것을 내 시스템에 설치하고, 프로젝트를 끝내고, 다른 네트워크에로드한다면, 똑같이 작동 할까? 또는 네트워크 당 DNS를 설정해야합니까? – PulsePanda

0

제거하려는 UnknownHostException 인 경우 올바른 IP 주소를 할당해야합니다. 예는 다음과 같습니다

addr = InetAddress.getByName("192.168.85.67"); 

의 형식에 대한 자세한 내용은 Javadocs를 참조하십시오.

0

192.168.859.672은 유효한 IP 주소가 아닙니다. 요소는 0..255 범위 내에 있어야합니다.

IP 주소는 서버가 실행되는 호스트의 로컬 주소 여야합니다.

Integer.parseInt("9532")은 단지 쓸데없는 로터리 방식 인 9532입니다.

+0

글쎄, 내가 한 이유는 다른 곳에서는 PORT가 변경 되었기 때문입니다. 그러나 질문을 위해서 나는 그것을 숫자로 만들었습니다. – PulsePanda

+0

포트 번호를 문자열로 내부적으로 전달하는 것 같습니다. int 여야합니다. 문자열을 정수로 변환하는 위치는 문자열이 처음 제공된 시점에 있으므로 즉시 유효성을 검사합니다. – EJP

+0

그게 좋은 지적이야, 나는 그런 생각을하지 못했다. 감사 :) – PulsePanda

0

변경 호스트 파일 /etc/hosts 파일

추가 다음 줄

127.0.1.1에서 192.168.859.672

관련 문제