2011-04-24 3 views
1

안녕하세요 여러분, 저는 실제 인터넷에서 UDP 패킷을 브로드 캐스트하고 클라이언트에서 수신해야하는 프로젝트를 진행하고 있습니다. 현재 로컬 LAN에서 패킷을 브로드 캐스팅하기 위해 멀티 캐스트 소켓을 사용하고 있습니다. UDP 데이터 그램의 NAT 탐색을 위해 jstunt라고 불리는이 프로젝트를 보았습니다. 그러나 관련 문서를 찾을 수 없으며 구현도 없습니다. 나는 Nat Traversal의 개념 인 UDP hole punching에 익숙하지만 위와 같은 문제에 직면 해 있으며 관련 문서 및 구현은 없습니다. 그래서 누구든지 도와 주실 수 있으며 또한 이것을 달성하기위한 몇 가지 다른 기법을 제안 할 수 있습니다.Java에서 udp 소켓 프로그래밍에 대한 도움이 필요합니다.

+1

당신이 전체 인터넷에 뭔가를 방송 할 필요가 확실한가요? 내 바이러스 백신이 오래되었다고 말하면서 지금 업데이트하려면 클릭해야하며,보고 싶지는 않습니다! – corsiKa

답변

1

다른 포스터에서 언급했듯이 인터넷에 패킷을 자유롭게 "브로드 캐스팅"할 수는 없습니다. 이것이 가능하다면, 네트워크는 쉽게 DOS화될 수 있으며 엄청난 혼잡이 초래 될 수 있습니다. 제어 된 네트워크 내에서도 방송은 일반적으로 엄격하게 통제되어있어 방해받지 않습니다. 즉, 아마도 패킷을 "브로드 캐스트"할 필요가 없을 것입니다.

P2P 소프트웨어의 작동 방식과 같이 인터넷을 통해 UDP "터널"을 만들어야하는 경우 수행 할 수 있습니다. 트릭은 일반적으로 NAT입니다. UDP 구멍 펀칭에 이미 익숙하다는 말을했지만 작동 방법을 알아낼 수는 없습니다. 다음은이에 사용할 수있는 자바 라이브러리입니다

http://www.masquerade.cz/en/nat-tunel-metodou-udp-hole-punching-v-jazyce-java/ http://ulno.net/projects/jpunch/는 http://samy.pl/pwnat/

또한 체크 아웃 UPNP : http://en.wikipedia.org/wiki/Universal_Plug_and_Play

그리고 스턴트 라이브러리 : http://nutss.gforge.cis.cornell.edu/stunt.php

+0

고마워요. 나는 당신의 제 2 연결을 통해 가고 유용하다는 것을 발견하고있다. – anonymous123

0

인터넷 백본이 허용하거나 허용하지 않는 것은 물론 귀하의 ISP와 고객이 UDP 브로드 캐스트를 지원할 가능성은 거의 없습니다. 먼저 을 조사해야합니다. 아직 프로그래밍 문제는 아니지만 실현 가능성 문제입니다.

+0

에 동의 했으니 까 네가 나트에서 빠져 나올 수 있다고해도 그건 너가 갈 때까지이다. 다른 네트워크에 메시지를 전송하려면 연결된 소켓이 필요합니다. 소켓의 끝 부분이 다시 브로드 캐스트 될 수 있습니다. – MeBigFatGuy

0

UDP 소켓 ITS를 도울를 사용하여 기본 DAY TIME 서버 구현

CLIENT 서버

import java.io.*; 
import java.net.*; 

public class DayTime_Server_Udp 
{ 
    public static final int DEFAULT_PORT = 3001; 

    public static void main (String[] args) throws IOException 
    { 
      if (args.length > 1) 
{ 
      throw new IllegalArgumentException ("Syntax: DaytimeServer [<port>]"); 
      } 

DatagramSocket socket = new DatagramSocket(args.length == 0 ? 
DEFAULT_PORT : Integer.parseInt (args[0])); 

     DatagramPacket packet = new DatagramPacket (new byte[1], 1); 

     while (true) 
     { 
       socket.receive (packet); 
       System.out.println("Received from: " + packet.getAddress() + ":" + 
packet.getPort()); 
       byte[] outBuffer = new java.util.Date().toString().getBytes(); 
       packet.setData (outBuffer); 
       packet.setLength (outBuffer.length); 
       socket.send (packet); 
      } 
    } 
} 

import java.io.*; 
import java.net.*; 

public class DayTime_Client_Udp 
{ 
    public static void main (String[] args) throws IOException 
    { 
      String hostname= "localhost"; 
      int port=13; 

     if ((args.length == 1)) 
{ 
       hostname=args[0]; 
      } 
else if ((args.length==2)) 
     { 
       hostname=args[0]; 
       port=Integer.parseInt(args[1]); 
      } 

     InetAddress host = InetAddress.getByName(hostname); 
      DatagramSocket socket = new DatagramSocket(); 

      DatagramPacket packet=new DatagramPacket (new byte[100], 0,host, port); 


      socket.send (packet); 

      packet.setLength(100); 
      socket.receive (packet); 
      socket.close(); 

     byte[] data = packet.getData(); 
      String time=new String(data); // convert byte array data into string 
     System.out.println(time); 
    } 
} 

IF 더 HELP 필요 이상으로 주석 IT 나는 또한 UDP BASD 다른 프로그램을 SO ITS HELP UU

관련 문제