需要java中udp套接字编程的帮助吗
嘿,伙计们,我正在做一个项目,我需要在实际的互联网上广播UDP数据包,并在客户端接收它们。目前我正在使用多播套接字在本地局域网上广播数据包。我曾遇到过一个名为jstunt的项目,用于UDP数据报的NAT遍历,但找不到任何相关文档,也没有实现。我熟悉Nat遍历、UDP打孔的概念,但面临着与上面相同的问题,没有相关的文档和实现。因此,任何人都可以提供帮助,并提出一些实现这一点的其他技术。您的ISP和您的客户机不太可能支持UDP广播,更不用说Internet主干网可能允许或不允许的广播了。你需要先调查一下。这还不是一个编程问题,而是一个可行性问题。您的ISP和您的客户端不太可能支持UDP广播,更不用说Internet主干网可能允许或不允许的广播了。你需要先调查一下。这还不是一个编程问题,这是一个可行性问题。正如另一张海报所提到的,你不能真正地将数据包免费“广播”到互联网上。如果这是可能的,网络很容易被拒绝服务,并将导致难以置信的拥塞。即使在受控网络中,广播通常也受到严格控制,以免失控。也就是说,也许你真的不需要“广播”数据包 如果您需要在internet上创建UDP“隧道”,例如P2P软件的工作方式,则可以这样做。诀窍通常是纳特。您提到您已经熟悉UDP打孔,但不知道如何使其工作。以下是一些可用于此目的的Java库: http://ulno.net/projects/jpunch/ 另外,请查看UPNP:需要java中udp套接字编程的帮助吗,java,udp,client-server,Java,Udp,Client Server,嘿,伙计们,我正在做一个项目,我需要在实际的互联网上广播UDP数据包,并在客户端接收它们。目前我正在使用多播套接字在本地局域网上广播数据包。我曾遇到过一个名为jstunt的项目,用于UDP数据报的NAT遍历,但找不到任何相关文档,也没有实现。我熟悉Nat遍历、UDP打孔的概念,但面临着与上面相同的问题,没有相关的文档和实现。因此,任何人都可以提供帮助,并提出一些实现这一点的其他技术。您的ISP和您的客户机不太可能支持UDP广播,更不用说Internet主干网可能允许或不允许的广播了。你需要先调查
特技库:正如另一张海报所提到的,你不能真正地将一个包免费“广播”到互联网上。如果这是可能的,网络很容易被拒绝服务,并将导致难以置信的拥塞。即使在受控网络中,广播通常也受到严格控制,以免失控。也就是说,也许你真的不需要“广播”数据包 如果您需要在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广播某些内容吗?除非你告诉我我的防病毒软件已经过时,我现在需要点击更新,否则我不想看到它!谢谢你,伙计。我正在浏览你的第二个链接,我发现它很有用。谢谢你。我正在浏览你的第二个链接,发现它很有用。