簡體   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