5

我必须发送一个 UDP 数据包并从 UDP 服务器获得响应。我虽然 UDP 与 Java 中的 java.net.DatagramPacket 类似,但 DatagramPacket 的文档似乎是您发送了一个数据包但没有得到任何返回,这是正确的使用方法还是我应该使用 java。网络套接字

4

4 回答 4

11

UDP数据报发送和接收示例(来源):

import java.io.*;
import java.net.*;

class UDPClient
{
   public static void main(String args[]) throws Exception
   {
      BufferedReader inFromUser =
         new BufferedReader(new InputStreamReader(System.in));
      DatagramSocket clientSocket = new DatagramSocket();
      InetAddress IPAddress = InetAddress.getByName("localhost");
      byte[] sendData = new byte[1024];
      byte[] receiveData = new byte[1024];
      String sentence = inFromUser.readLine();
      sendData = sentence.getBytes();
      DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9876);
      clientSocket.send(sendPacket);
      DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
      clientSocket.receive(receivePacket);
      String modifiedSentence = new String(receivePacket.getData());
      System.out.println("FROM SERVER:" + modifiedSentence);
      clientSocket.close();
   }
}
于 2011-12-19T14:26:01.727 回答
2

您必须使用 DatagramPacket 和 DatagramSocket。当你发送一个数据包时,你只是发送一个数据包。但是,当您收到一个数据包时,您可以获得一个从另一个程序发送的数据包(例如服务器回复)

http://docs.oracle.com/javase/7/docs/api/java/net/DatagramSocket.html

套接字仅用于 TCP 连接。

于 2011-12-19T14:25:14.630 回答
2

Java 文档确实涵盖了如何编写客户端和服务器。

http://docs.oracle.com/javase/tutorial/networking/datagrams/clientServer.html

You want to look at DatagramSocket#receive

于 2011-12-19T14:26:06.123 回答
1

That's precisely the distinction between UDP and TCP sockets.

UDP is broadcast, whereas TCP with java.net.Socket is point to point. UDP is fire-and-forget, analogous to publishing a message on a JMS Topic.

See: http://docs.oracle.com/javase/tutorial/networking/datagrams/index.html

于 2011-12-19T14:28:44.367 回答