2012-10-18 2 views
2

UDP 네트워킹 프로그램 (클라이언트 - 서버)을 작성 중입니다. 몇 가지 문제가 있습니다.Java DatagramSocket이 초기화시 멈 춥니 다.

I/O 데이터에 스트림을 사용하고 싶으므로 "udp inputstream"을 검색하여 UDPInputStreamUDPOutputStream을 찾았습니다. 그러나 이들을 사용하려고하면 UDPOutputStream을 초기화 할 때 프로그램이 멈추게됩니다.

가 정지 내 코드의 라인 :

dsock = new DatagramSocket(); 

것은 왜 실행이 중지 않습니다

outStream = new UDPOutputStream(InetAddress.getByName("127.0.0.1"), port); 
System.out.println("UDP output stream initialized."); // <-- doesn't get called 

내가 UDPOutputStream의 소스를 체크 아웃, 코드는이 라인에 걸리면 이 줄에? 서버 측에서는 여전히 "오래된"비 스트림 버전의 간단한 UDP 코드를 사용하며 작동합니다. 소켓은 같은 방법으로 초기화되고 끊기지 않습니다. 초기화에 포트 번호를 넣으려고했으나 문제가 해결되지 않습니다.

+0

127.0.0.1에 바인딩 된 UDP 소켓이 로컬 호스트 외부의 아무 곳이나 보낼 수 없습니다. 그게 니가 원하는거야? 그렇지 않은 경우, InetAddress 대신에 null을 시도하십시오. – EJP

+0

데이터를 스트림으로 처리하려면 UDP가 절대적으로 잘못된 프로토콜입니다. TCP를 사용해야합니다. – artbristol

+0

서버는 다른 컴퓨터에서도 동일한 컴퓨터에서 실행되므로 127.0.0.1은 내가 원하는 주소입니다. 그것은 서버 측에서 작동하기 때문에 문제가되어서는 안됩니다. – manabreak

답변

0

호스트 컴퓨터에는 둘 이상의 네트워크 인터페이스가 있습니다 (예 : 루프백 인터페이스의 경우 127.0.0.1, 네트워크 카드의 경우 다른 주소, 두 개 이상의 네트워크 카드가있을 수 있음).

루프백 주소 127.0.0.1에 바인딩하면 로컬로 보낸 패킷 만 수신 할 수 있습니다. 원격 시스템에서 네트워크를 통해 전송 된 패킷을 수신하려면 로컬 IP 주소 (예 : 192.168.1.100)에 바인드해야합니다. 다음

시도 :

InetAddress addr = InetAddress.InetAddress.getLocalHost(); 
outStream = new UDPOutputStream(addr, port); 
관련 문제