2012-05-04 4 views
1

2 ~ 4 명의 플레이어가있는 클래식 5 카드 포커를 시뮬레이트하는 Java 게임을 만들고 있습니다. 대부분의 데이터는 서버에서 처리하지만 온라인 서버를 사용할 수 없기 때문에 사용자가 로컬 서버를 만들어 게임을 호스팅 할 수 있도록하는 것이 좋습니다.브로드 캐스트 서버 검색

이제 IP를 사용하여 게임에 연결하고 싶지 않으므로 사용자 내의 "검색"인터페이스를 만들어 모든 avaible 게임을 볼 수 있습니다. 이것은 UDP 프로토콜과 공통 그룹에 방송 연구를 사용하여 수행됩니다 :

(코드는 여기에 보여대로 작동하지 않을 수 있습니다 실행하는 경우에만 작업을 보여주기 위해 단순화)

클라이언트

MulticastSocket socket = new MulticastSocket(6020); 
InetAddress group = InetAddress.getByName("226.0.0.1"); 
socket.joinGroup(group); 

DatagramPacket packet = new DatagramPacket(new byte[] {(byte) 0xF0}, 1, group, 6020); 
socket.send(packet); 

while(true) { 
    buf = new byte[1]; 
    packet = new DatagramPacket(buf, buf.length); 
    socket.receive(packet); 

    if(packet.getData()[0] == 15) { 
     Socket client = new Socket(packet.getAddress(), 6020); 
    } 
} 

서버

MulticastSocket socket = new MulticastSocket(6020); 
InetAddress group = InetAddress.getByName("226.0.0.1"); 
socket.joinGroup(group); 

// new thread listening on port 6020 TCP 
ServerSocket server = new ServerSocket(6020); 
new Thread(new Runnable() { 

      public void run() { 
       while(true) { 
        // new thread communicating with client and back listening on port 6020 
        new ServerThread(server.accept()); 
       } 
      } 
}).start(); 

// listening on port 6020 UDP 
byte[] buf; 
DatagramPacket packet; 
while(true) { 
    buf = new byte[1]; 
    packet = new DatagramPacket(buf, buf.length); 
    socket.receive(packet); 

    if(packet.getData()[0] == -16) { 
     DatagramPacket packet = new DatagramPacket(new byte[] {(byte) 0x0F}, 1, packet.getSocketAddress()); 
     socket.send(packet); 
    } 
} 

클라이언트 UDP 브로드 캐스트 패킷을 포트 6020에서 보냅니다. 서버가 바이트 0xF0로 구성된 경우 서버가이 패킷을 수신하면 바이트 0x0F를 클라이언트에 보냅니다. 모든 클라이언트는 또한 포트 6020에서 청취하고 있으며 바이트 0x0F로 구성된 패킷을 수신하면 포트 6020의 서버에 대한 새로운 연결 TCP를 시작합니다.

내 질문 :이 "발견을 달성하는 더 좋은 방법이 있습니까? "시스템? 이것이 로컬 네트워크에서만 작동한다는 것을 알고 있습니다. 로컬 서버를 사용하여 "외부"검색을 확장 할 수 있습니까?

답변

1

플레이어를 서버와 연결할 수있는 알려진 브로커를 설정하거나 서버 목록을 제공하지 않으려면 운이 좋지 않을 수 있습니다. 이전에 알았 듯이 멀티 캐스트와 브로드 캐스트는 일반적으로 대부분의 스위치에서 WAN으로 보내지는 않습니다 (물론 인터넷을 탐색 할 수는 없습니다).

알려진 서버/브로커 설정과 관련하여 가정용 연결과 동적 IP가있는 경우 동적 DNS를 살펴 보는 것이 좋습니다. 거기에 IP를 변경으로 IP를 가리 키도록 자동으로 변경되는 그들의 시스템에 하위 도메인을 설정할 수 있도록 해주는 많은 공급자가 있습니다.