2013-08-16 5 views
-1

피어 투 피어 네트워크에서 채팅 응용 프로그램을 만들고 있습니다.LAN을 통한 멀티 캐스트 IP 주소

응용 프로그램이 설치된 컴퓨터와 실행중인 컴퓨터를 검색 할 수있는 코드를 작성하려고합니다 (누가 온라인 상태인지 보여줄 수 있도록).

나는 프로그램이 그 프로그램이 실행되고 다른 멀티 캐스트 IP를 감지하고 표시하는 온라인 사용자 목록에 추가됩니다되는 IP 주소 ..

어떻게 프로그램을 작성하는 방법을 가르쳐주세요 멀티 캐스트 것이라고 생각 이것 때문에.

또는 응용 프로그램이 설치되어있는 클라이언트를 검색하도록하려면 어떤 PC에서 내 응용 프로그램

+0

이 프로그램을 작성하는 방법을 알려주십시오. – Kundan

+0

지금까지 프로그램을 작성한 방법,보고있는 문제점, 관련 코드 및 수행하려고 시도한 내용을 알려주십시오. 문제를 해결하십시오. –

답변

0

를 실행 표시하려면이 응용 프로그램에 대해 나에게, 당신은 설정에 항상 실행하는 서비스 나 프로그램이 필요합니다 다른 논리를 말해 백그라운드에서. 왜 누가 설치했는지 확인해야합니까?

실행 중인지 확인하려면 프로그램에서 아래에 설명 된 코드를 실행하면됩니다.

서버의 경우 다음과 같은 스레드를 실행해야합니다.

class MultiCastServerThread extends Thread { 
    protected DatagramSocket socket = new DatagramSocket(); 
    protected String multicastGroupId = "224.0.0.224"; 
    protected long delay = 1000l; 
    protected int port = 2244; 

    public MultiCastServerThread() throws IOException { 
     super("SpeakServerThread"); 
    } 

    public void run() { 
     InetAddress group = InetAddress.getByName(multicastGroupId); 
     while (true) { 
      try { 
       byte[] buf = new byte[256]; 
       buf = "Message".getBytes(); 
       DatagramPacket packet = new DatagramPacket(buf, buf.length, group, port); 
       socket.send(packet); 
       sleep(delay); 
      }catch (InterruptedException e){ 
      }catch (IOException e) { 
       e.printStackTrace(); 
       socket.close(); 
       break; 
      } 
     } 
    } 
} 

매초마다 "메시지"메시지를 멀티 캐스트 그룹 224.0.0.224에 멀티 캐스트합니다.

클라이언트의 경우 다음과 같은 메소드를 호출해야합니다.

final String MULTICAST_GROUP = "224.0.0.224"; 
final int PORT = 2244; 
public String getMultiCast() { 
    MulticastSocket socket = new MulticastSocket(PORT); 
    InetAddress address = InetAddress.getByName(MULTICAST_GROUP); 
    socket.joinGroup(address); 
    DatagramPacket packet; 
    byte[] buf = new byte[256]; 
    packet = new DatagramPacket(buf, buf.length); 
    socket.receive(packet); 
    String rtn = new String(packet.getData()); 
    socket.leaveGroup(address); 
    socket.close(); 
    return rtn; 
} 

그것은 멀티 캐스트 그룹 224.0.0.224에서 수신하고 즉시이 패킷을 수신 한 것처럼 소켓 닫히고 패킷 바이트 배열에서 문자열을 반환한다.

그러나 socket.recieve()은 차단 호출이므로 요구 사항에 따라 클라이언트 메서드를 Separate 스레드 또는 작업에서 호출하고 일부 시간 초과 메커니즘을 사용해야합니다. 귀하의 시스템에 대한 자세한 내용이 없으면 무엇이 최선인지 말하기가 어렵습니다.

+0

안녕하세요. .. 작업 중 ... – Kundan

+1

close() 직전에 leaveGroup()을 호출하면 중복됩니다. – EJP

관련 문제