gpt4 book ai didi

java - java中如何用TCP模拟UDP?

转载 作者:行者123 更新时间:2023-12-01 12:41:46 25 4
gpt4 key购买 nike

我希望能够让 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连接监听和发送)

最佳答案

我将尝试非常直接地回答标题中提出的问题:“如何在java中用TCP模拟UDP?”

简而言之,你不能。 TCP 保证可靠传输,而 UDP 则只是“即发即弃”。因此,您始终可以将 UDP 数据报发送到网络中,而无需知道或注意接收方是否存在并正在监听。

另一方面,TCP 需要先与对等方建立连接,然后才能发送任何内容。因此,当您在没有人监听的情况下尝试发送时,任何“用 TCP 模拟 UDP”的尝试都必定会失败。

显然,编写一个监听 UDP 并通过 TCP 将收到的任何数据重新发送给对等方的程序并不困难;或者类似地,监听 TCP 并通过 UDP 重新发送它所获得的内容的程序。但这并不是“模拟”,只是使用不同的协议(protocol)重新发送。

关于java - java中如何用TCP模拟UDP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25038724/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com