Нужна помощь с программированием сокета UDP в Java - PullRequest
1 голос
/ 24 апреля 2011

Эй, ребята, я работаю над проектом, в котором мне нужно транслировать UDP-пакеты в реальном интернете, а также получать их на клиенте. В настоящее время я использую многоадресный сокет для трансляции пакета по локальной сети. Я наткнулся на этот проект, называемый jstunt для NAT-обхода UDP-дейтаграммы, но не могу найти какую-либо соответствующую документацию по нему, а также никакой реализации. Я знаком с концепциями Nat Traversal, перфорацией UDP, но столкнулся с той же проблемой, что и выше, без соответствующей документации и реализации. Так что кто-нибудь может помочь, а также предложить некоторые другие методы для достижения этой цели.

Ответы [ 3 ]

1 голос
/ 24 апреля 2011

Как уже упоминалось в другом постере, вы не можете «свободно» транслировать пакет в Интернет.Если бы это было возможно, сети могли бы легко быть DOS'ами, и это привело бы к невероятной загруженности.Даже в контролируемых сетях вещание обычно жестко контролируется, чтобы не выходить из-под контроля.Тем не менее, возможно, вам не нужно «транслировать» пакет.

Если вам нужно создать UDP-туннель через Интернет, например, как работает программное обеспечение P2P, это можно сделать.Хитрость обычно в NAT.Вы упомянули, что уже знакомы с дыроколом UDP, но не могли понять, как заставить его работать.Вот некоторые библиотеки Java, которые можно использовать для этого:

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

И библиотека STUNT: http://nutss.gforge.cis.cornell.edu/stunt.php

0 голосов
/ 24 апреля 2011

ЕГО ОСНОВНАЯ РЕАЛИЗАЦИЯ СЕРВЕРА ВРЕМЕНИ ДНЯ С ИСПОЛЬЗОВАНИЕМ РОЗЕТКИ UDP ЕГО ПОМОГАЕТ ВАМ

КЛИЕНТ

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);
    }
}

СЕРВЕР

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);
            }
    }
}

ЕСЛИ БОЛЬШЕ ПОМОЩЬ, ЧЕМ КОММЕНТАРИЙ, ЭТО Я ТАКЖЕИМЕЙТЕ ДРУГУЮ ПРОГРАММУ С UDP BASD, ТАК ЕГО ПОМОГИТЕ UU

0 голосов
/ 24 апреля 2011

Весьма маловероятно, что ваш Интернет-провайдер и ваши клиенты будут поддерживать UDP-трансляцию, не говоря уже о том, что может или не может использовать магистраль Интернета. Сначала вам нужно исследовать это . Пока это не проблема программирования, а проблема осуществимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...