[英]How to simulate UDP with TCP in java?
我希望能夠讓TCP客戶端發送基本字符串以通過UDP廣播。
我似乎找不到有關如何將UDP數據報寫入TCP或通過TCP發送被攔截並轉換為UDP的消息的任何資源。
發件人:
import java.io.*;
import java.net.*;
public class MulticastSender {
public static void main(String[] args) {
DatagramSocket socket = null;
DatagramPacket outPacket = null;
byte[] outBuf;
final int PORT = 8888;
try {
socket = new DatagramSocket();
long counter = 0;
String msg;
while (true) {
msg = "This is multicast! " + counter;
counter++;
outBuf = msg.getBytes();
//Send to multicast IP address and port
InetAddress address = InetAddress.getByName("224.2.2.3");
outPacket = new DatagramPacket(outBuf, outBuf.length, address, PORT);
socket.send(outPacket);
System.out.println("Server sends : " + msg);
try {
Thread.sleep(500);
} catch (InterruptedException ie) {
}
}
} catch (IOException ioe) {
System.out.println(ioe);
}
}
}
接收器:
import java.io.*;
import java.net.*;
public class MulticastReceiver {
public static void main(String[] args) {
MulticastSocket socket = null;
DatagramPacket inPacket = null;
byte[] inBuf = new byte[256];
try {
//Prepare to join multicast group
socket = new MulticastSocket(8888);
InetAddress address = InetAddress.getByName("224.2.2.3");
socket.joinGroup(address);
while (true) {
inPacket = new DatagramPacket(inBuf, inBuf.length);
socket.receive(inPacket);
String msg = new String(inBuf, 0, inPacket.getLength());
System.out.println("From " + inPacket.getAddress() + " Msg : " + msg);
}
} catch (IOException ioe) {
System.out.println(ioe);
}
}
}
TCP客戶端是否可以通過某種方式寫入服務器上打開的TCP套接字,然后將要通過偵聽UDP的內容發送到UDP客戶端? (這樣,TCP客戶端可以將消息發送到UDP,並且可以偵聽UDP消息並通過TCP連接發送UDP消息)
我將嘗試直接回答標題中提到的問題:“如何在Java中使用TCP模擬UDP?”
簡而言之,你不能。 TCP保證可靠的傳輸,而UDP就是一勞永逸的。 因此,您始終可以將UDP數據報發送到網絡中,而無需知道或通知接收方是否存在並正在偵聽。
另一方面,TCP需要先連接到對等方,然后才能發送任何內容。 因此,在沒有人收聽的情況下嘗試發送時,任何“用TCP模擬UDP”的嘗試都必須失敗。
顯然,編寫一個偵聽UDP並通過TCP將其接收的所有數據重新發送給對等方的程序並不是很難。 或類似的程序,它偵聽TCP並重新發送它從UDP獲得的內容。 但這不是“模擬”,只是重新發送了不同的協議。
我不確定我是否理解這個問題。
如果我錯了糾正我:
A-客戶端正在將TCP數據包發送到稱為B的TCP服務器套接字。
B(TCP服務器套接字)獲取數據包,並且必須通過UDP將其發送到客戶端套接字調用C? (在這種情況下,您所說的此客戶端套接字實際上是服務器套接字。)
如果這是您要做的全部,那么答案很簡單。
您在稱為B的服務器套接字上獲取TCP消息,從中獲取內容,然后將內容放在UDP數據報上,並通過UDP將其發送到C。
我的唯一建議是:一旦在服務器B上收到TCP消息,請實例化一個新線程以處理接收到的消息(獲取內容,然后將其放入UDP數據包中)並將其發送給客戶端C。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.