Я должен отправить пакет UDP и получить ответ от сервера UDP. Хотя UDP был аналогичен java.net.DatagramPacket в Java, но документация для DatagramPacket, похоже, заключается в том, что вы отправляете пакет, но ничего не получаете обратно, правильно ли это использовать или я должен использовать java. сеть.Socket
Нужно отправить UDP-пакет и получить ответ на Java
Ответы (4)
Пример отправки и получения дейтаграмм 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();
}
}
DatagramPacket.getLength()
.
- person bezmax; 19.12.2011
receivePacket.getData()
содержит не только полученные данные. Он также содержит неиспользуемую часть буфера. Чтобы получить строку с полученными данными, используйте new String(receivePacket.getData(), 0, receivePacket.getLength(), StandardCharsets.UTF_8)
и настройте кодировку в соответствии с вашими ожиданиями.
- person Augustus Kling; 19.04.2015
Вы должны использовать DatagramPacket и DatagramSocket. Когда вы отправляете пакет, вы просто отправляете пакет. Однако, когда вы получаете пакет, вы можете получить пакет, который был отправлен из другой программы (например, ответ сервера)
http://docs.oracle.com/javase/7/docs/api/java/net/DatagramSocket.html
Socket предназначен только для TCP-соединений.
Документация по Java описывает, как написать клиент и сервер.
http://docs.oracle.com/javase/tutorial/networking/datagrams/clientServer.html
Вы хотите просмотреть DatagramSocket#получить
Именно в этом разница между сокетами UDP и TCP.
UDP является широковещательным, тогда как TCP с java.net.Socket является двухточечным. UDP работает по принципу «выстрелил и забыл», аналогично публикации сообщения в теме JMS.
См.: http://docs.oracle.com/javase/tutorial/networking/datagrams/index.html