如何在java中用TCP模拟UDP?
我希望能够有一个TCP客户端发送基本字符串通过UDP广播 我似乎找不到任何关于如何将UDP数据报写入TCP或通过TCP发送被截获并转换为UDP的消息的资源 发件人:如何在java中用TCP模拟UDP?,java,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 out
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连接收听和发送)我不确定是否理解了这个问题 如果我错了,请纠正我: A-客户端正在向名为B的TCP服务器套接字发送TCP数据包 B(TCP服务器套接字)获取数据包,并且必须通过UDP将它们发送到客户端套接字调用C?(在本例中,您所称的客户机套接字实际上是一个服务器套接字。) 如果这就是你想要做的一切,那么答案是微不足道的 在名为B的服务器套接字上获取TCP消息,从中获取内容,将内容放在UDP数据报上,并通过UDP将其发送到C
我唯一的建议是:在服务器B上接收TCP消息后,实例化一个新线程来处理接收到的消息(获取内容,然后将其放入UDP数据包),并将其发送到客户端C。我将尝试非常直接地回答标题中提出的问题:“如何在java中用TCP模拟UDP?” 简言之,你不能。TCP保证了可靠的传输,而UDP只是简单的发射和遗忘。因此,您可以始终将UDP数据报发送到网络中,而不知道或不注意接收器是否存在并正在侦听 另一方面,TCP在发送任何内容之前需要连接到对等方。因此,当您在无人监听的情况下尝试发送时,“使用TCP模拟UDP”的任何尝试都必须失败
显然,编写一个监听UDP并通过TCP将接收到的任何数据重新发送给对等方的程序并不困难;或者类似地,一个程序侦听TCP并重新发送它通过UDP获得的内容。但这不是“模拟”,只是使用不同的协议重新发送。我不理解您遇到的问题。您能够通过TCP发送消息吗?然后,您是否能够通过TCP接收这些消息?您能够通过UDP发送消息吗?您能够通过UDP接收消息吗?只要您了解TCP是一个有保证的顺序和可靠性的流,UDP是基于消息的,而没有保证顺序和可靠性,如果您可以通过TCP和UDP进行读写,那么您的问题应该很容易解决。您想用它实现什么?看看这个问题:是的,这正是我试图实现的目标,尽管看起来没有人做过类似的事情。Setsuna ammoQ已经回答了你的问题。尝试混合使用这两种协议非常容易,但这并不是你所说的模拟。因此,你想将“msg”发送到另一个名为C的服务器,但这次使用的是TCP。为了实现这一点,您只需创建一个实现可运行(或扩展线程)的java套接字客户机类。这个类就是您的TCP客户机。您将把刚刚收到的“msg”传递给这个类的实例。传递消息后,只需调用线程的run()方法,此线程将处理通过TCP发送消息的问题。您能提供一个示例吗?