Нужно отправить пакет UDP и получить ответ на Java - PullRequest
5 голосов
/ 19 декабря 2011

Я должен отправить пакет UDP и получить ответ от сервера UDP.Я думал, что UDP был аналогичен java.net.DatagramPacket в Java, но документация для DatagramPacket, кажется, такова, что вы отправляете пакет, но ничего не получаете назад, это правильная вещь для использования или я должен использовать java.net.Socket

Ответы [ 4 ]

10 голосов
/ 19 декабря 2011

Пример отправки и получения 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();
   }
}
2 голосов
/ 19 декабря 2011

В документации Java описывается, как написать клиент и сервер.

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

Вы хотите посмотреть на DatagramSocket # receive

2 голосов
/ 19 декабря 2011

Вы должны использовать DatagramPacket и DatagramSocket.Когда вы отправляете пакет, вы просто отправляете пакет.Однако, когда вы получаете пакет, вы можете получить пакет, который был отправлен из другой программы (например, ответ сервера)

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

Сокет предназначен только для TCP-соединений.

1 голос
/ 19 декабря 2011

В этом и заключается различие между сокетами UDP и TCP.

UDP транслируется, тогда как TCP с java.net.Socket является двухточечным. UDP - это «забыл и забыл», аналогично публикации сообщения в теме JMS.

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

...