[英]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.