嘿,我正在开发一个项目,我需要在实际的互联网上广播一个UDP数据包,并在客户端接收它们。目前我正在使用多播套接字在本地局域网上广播数据包。我遇到了一个名为jstunt的项目,用于NAT数据报穿越,但无法找到任何相关文档,也没有实现。我熟悉Nat Traversal,UDP打孔的概念,但是面临着与上述相同的问题,没有相关的文档和实现。所以任何人都可以请帮助,并建议一些其他技术来实现这一点。在java中需要关于udp套接字编程的帮助
回答
正如另一张海报所提到的,你不能真正“自由地”向互联网“广播”一个数据包。如果可能的话,网络很容易被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
谢谢你。我正在浏览您的第二个链接,并发现它很有用。 – anonymous123 2011-04-24 06:24:21
你的ISP和你的客户很少会支持UDP广播,更不用说互联网骨干网可能允许或不允许的内容了。您需要首先调查。这不是一个编程问题,这是一个可行性问题。
同意,即使你可以摆脱自然,这就像你会走。您需要一个连接的套接字将消息传输到其他网络,此时套接字的末端可以再次广播。 – MeBigFatGuy 2011-04-24 04:38:19
ITS全天基本时间服务器实现使用UDP SOCKET它的帮助你
CLIENT
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
- 1. 需要关于java编程的帮助
- 2. 需要java编程帮助!
- 3. Java异常 - 套接字已关闭,可靠的udp帮助?
- 4. 需要关于java的帮助GUI
- 5. 需要关于Java签名的帮助
- 6. 需要关于Java代码的帮助
- 7. 在编程竞赛中需要关于问题集的帮助
- 8. 需要帮助了解套接字getaddrinfo
- 9. 套接字超时 - 需要帮助
- 10. 需要关于masm32程序的帮助
- 11. 需要关于进程的帮助
- 12. 需要关于NSXMLPaser教程的帮助
- 13. 需要帮助关于FMDatabase
- 14. 需要帮助关于datetimepicker
- 15. Java - 关闭UDP套接字
- 16. 在选项卡下需要关于ListActivity的Android编程帮助
- 17. 需要关于python嵌套字典的帮助
- 18. 在C编程中需要关于特殊字符常量的值的帮助
- 19. 的Java套接字 - 需要帮助理解他们更好地
- 20. 在Python中的UDP套接字编程
- 21. 在Java中需要帮助
- 22. 需要帮助MySQL的关于在第
- 23. Android需要编程帮助
- 24. 新的套接字编程,需要帮助了解如何连接
- 25. 在Python编程中需要PowerShell帮助
- 26. 需要帮助编程文字游戏
- 27. 在java中需要关于ResultSet的帮助
- 28. UDP套接字编程HELP
- 29. 套接字编程UDP GetSocketOpt
- 30. 需要关于SQL Server 2008编程的帮助
你确定你需要广播的东西到整个互联网?除非你告诉我我的杀毒软件已经过时,我现在需要点击更新,我不想看到它! – corsiKa 2011-04-24 04:42:52