需要java中udp套接字编程的帮助吗

需要java中udp套接字编程的帮助吗,java,udp,client-server,Java,Udp,Client Server,嘿,伙计们,我正在做一个项目,我需要在实际的互联网上广播UDP数据包,并在客户端接收它们。目前我正在使用多播套接字在本地局域网上广播数据包。我曾遇到过一个名为jstunt的项目,用于UDP数据报的NAT遍历,但找不到任何相关文档,也没有实现。我熟悉Nat遍历、UDP打孔的概念,但面临着与上面相同的问题,没有相关的文档和实现。因此,任何人都可以提供帮助,并提出一些实现这一点的其他技术。您的ISP和您的客户机不太可能支持UDP广播,更不用说Internet主干网可能允许或不允许的广播了。你需要先调查

嘿,伙计们,我正在做一个项目,我需要在实际的互联网上广播UDP数据包,并在客户端接收它们。目前我正在使用多播套接字在本地局域网上广播数据包。我曾遇到过一个名为jstunt的项目,用于UDP数据报的NAT遍历,但找不到任何相关文档,也没有实现。我熟悉Nat遍历、UDP打孔的概念,但面临着与上面相同的问题,没有相关的文档和实现。因此,任何人都可以提供帮助,并提出一些实现这一点的其他技术。

您的ISP和您的客户机不太可能支持UDP广播,更不用说Internet主干网可能允许或不允许的广播了。你需要先调查一下。这还不是一个编程问题,而是一个可行性问题。

您的ISP和您的客户端不太可能支持UDP广播,更不用说Internet主干网可能允许或不允许的广播了。你需要先调查一下。这还不是一个编程问题,这是一个可行性问题。

正如另一张海报所提到的,你不能真正地将数据包免费“广播”到互联网上。如果这是可能的,网络很容易被拒绝服务,并将导致难以置信的拥塞。即使在受控网络中,广播通常也受到严格控制,以免失控。也就是说,也许你真的不需要“广播”数据包

如果您需要在internet上创建UDP“隧道”,例如P2P软件的工作方式,则可以这样做。诀窍通常是纳特。您提到您已经熟悉UDP打孔,但不知道如何使其工作。以下是一些可用于此目的的Java库:

http://ulno.net/projects/jpunch/

另外,请查看UPNP:


特技库:

正如另一张海报所提到的,你不能真正地将一个包免费“广播”到互联网上。如果这是可能的,网络很容易被拒绝服务,并将导致难以置信的拥塞。即使在受控网络中,广播通常也受到严格控制,以免失控。也就是说,也许你真的不需要“广播”数据包

如果您需要在internet上创建UDP“隧道”,例如P2P软件的工作方式,则可以这样做。诀窍通常是纳特。您提到您已经熟悉UDP打孔,但不知道如何使其工作。以下是一些可用于此目的的Java库:

http://ulno.net/projects/jpunch/

另外,请查看UPNP:


STUNT库:

它使用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);
            }
    }
}
import java.io.*;
导入java.net。*;
公共类日间\u服务器\u Udp
{
公共静态最终int默认_端口=3001;
公共静态void main(字符串[]args)引发IOException
{
如果(参数长度>1)
{
抛出新的IllegalArgumentException(“语法:DaytimeServer[]”);
}
DatagramSocket套接字=新DatagramSocket(args.length==0?
默认_端口:Integer.parseInt(args[0]);
DatagramPacket数据包=新的DatagramPacket(新字节[1],1);
while(true)
{
socket.receive(数据包);
System.out.println(“接收自:“+packet.getAddress()+”:”+
packet.getPort());
byte[]exputffer=new java.util.Date().toString().getBytes();
packet.setData(突发);
packet.setLength(exputffer.length);
socket.send(包);
}
}
}

如果需要更多的帮助而不是注释,我还有其他带有UDP BASD的程序,所以它的帮助UU

它的基本日时服务器实现使用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);
            }
    }
}
import java.io.*;
导入java.net。*;
公共类日间\u服务器\u Udp
{
公共静态最终int默认_端口=3001;
公共静态void main(字符串[]args)引发IOException
{
如果(参数长度>1)
{
抛出新的IllegalArgumentException(“语法:DaytimeServer[]”);
}
DatagramSocket套接字=新DatagramSocket(args.length==0?
默认_端口:Integer.parseInt(args[0]);
DatagramPacket数据包=新的DatagramPacket(新字节[1],1);
while(true)
{
socket.receive(数据包);
System.out.println(“接收自:“+packet.getAddress()+”:”+
packet.getPort());
byte[]exputffer=new java.util.Date().toString().getBytes();
packet.setData(突发);
packet.setLength(exputffer.length);
socket.send(包);
}
}
}

如果需要更多的帮助而不是评论,我还有其他带有UDP-BASD的程序,所以它的帮助UU

是一致的,即使您可以退出nat,您也只能这样做。您将需要一个连接的套接字将消息传输到其他网络,在这一点上,套接字的一端可以再次广播。同意,即使您可以退出nat,您也只能这样做。您需要一个已连接的套接字将消息传输到其他网络,在该点上,套接字的一端可以再次广播。是否确实需要向整个internet广播某些内容?除非你告诉我我的防病毒软件已经过时,我现在需要点击更新,否则我不想看到它!您确定需要向整个internet广播某些内容吗?除非你告诉我我的防病毒软件已经过时,我现在需要点击更新,否则我不想看到它!谢谢你,伙计。我正在浏览你的第二个链接,我发现它很有用。谢谢你。我正在浏览你的第二个链接,发现它很有用。