我必须发送UDP数据包并从UDP服务器获取响应。我虽然UDP类似于Java中的java.net.DatagramPacket,但是DatagramPacket的文档似乎是你发送了一个数据包但没有得到任何回报,这是正确的使用方法还是我应该使用java。 net.Socket
答案 0 :(得分:10)
UDP数据报发送和接收示例(source):
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();
}
}
答案 1 :(得分:2)
您必须使用DatagramPacket和DatagramSocket。发送数据包时,您只需发送一个数据包。但是,当您收到数据包时,您可以获得从另一个程序发送的数据包(例如服务器回复)
http://docs.oracle.com/javase/7/docs/api/java/net/DatagramSocket.html
套接字仅用于TCP连接。
答案 2 :(得分:2)
Java文档确实介绍了如何编写客户端和服务器。
http://docs.oracle.com/javase/tutorial/networking/datagrams/clientServer.html
答案 3 :(得分:1)
这正是UDP和TCP套接字之间的区别。
UDP是广播,而TCP与java.net.Socket是点对点的。 UDP是即发即忘,类似于在JMS主题上发布消息。
请参阅:http://docs.oracle.com/javase/tutorial/networking/datagrams/index.html