嘿,我正在開發一個項目,我需要在實際的互聯網上廣播一個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