繁体   English   中英

如何在Java中使用TCP模拟UDP?

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM