Devo inviare un pacchetto UDP e ottenere una risposta dal server UDP. Ho pensato che UDP fosse analogo a un java.net.DatagramPacket in Java, ma la documentazione di DatagramPacket sembra essere quella di inviare un pacchetto ma non recuperare nulla, è questa la cosa giusta da usare o dovrei usare java. net.SocketÈ necessario inviare un pacchetto UDP e ricevere una risposta in Java
risposta
Esempio di UDP datagram invio e la ricezione (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();
}
}
Questo sembra buono, ma uno non sembra essere una lunghezza del pacchetto definita per il server, cioè non penso che la lunghezza del pacchetto del pacchetto restituito dal server sia sempre la stessa quindi devo solo assicurarmi che il receiveData il buffer è abbastanza grande da gestire la dimensione del pacchetto più grande possibile. –
Sì. UDP è un protocollo inaffidabile ed è usato raramente per inviare grandi quantità di dati su di esso. Tuttavia, una volta ricevuto il pacchetto, è possibile leggere la quantità effettiva di byte contenuti da 'DatagramPacket.getLength()'. – bezmax
'receivePacket.getData()' non contiene solo i dati ricevuti. Contiene anche la parte inutilizzata del buffer. Per ottenere una stringa con i dati ricevuti usa 'new String (receivePacket.getData(), 0, receivePacket.getLength(), StandardCharsets.UTF_8)' e modifica il set di caratteri in base a ciò che ti aspetti. –
Devi utilizzare un DatagramPacket e un DatagramSocket. Quando si invia un pacchetto si invia semplicemente un pacchetto. Tuttavia, quando si riceve un pacchetto è possibile ottenere un pacchetto che è stato inviato da un altro programma (ad esempio i server di risposta)
http://docs.oracle.com/javase/7/docs/api/java/net/DatagramSocket.html
Socket è solo per le connessioni TCP.
La documentazione Java non copre come scrivere un client e un server.
http://docs.oracle.com/javase/tutorial/networking/datagrams/clientServer.html
si vuole guardare al DatagramSocket#receive
È proprio la distinzione tra i socket UDP e TCP.
UDP viene trasmesso, mentre TCP con java.net.Socket è punto a punto. UDP è fire-and-forget, analogo alla pubblicazione di un messaggio su un argomento JMS.
Vedere: http://docs.oracle.com/javase/tutorial/networking/datagrams/index.html
UDP non viene trasmesso. Broadcast è una cosa a livello IP. – OrangeDog
- 1. Trasmissione e risposta UDP iPhone
- 2. Come inviare la richiesta POST HTTP e ricevere risposta?
- 3. Come inviare una richiesta di riunione iCal utilizzando Java Mail e ricevere la risposta
- 4. UDP Broadcast in Java
- 5. Invio pacchetto UDP in C#
- 6. Utilizzo di netcat per inviare un pacchetto UDP senza binding
- 7. Come inviare solo un pacchetto UDP con netcat?
- 8. Swift: Ricevere UDP con GCDAsyncUdpSocket
- 9. Semplice UDP Socket Tutorial Necessario
- 10. Scarta pacchetto UDP in entrata senza leggere
- 11. jQuery: Posso inviare e ricevere una risposta $ .ajax mentre è in sospeso una richiesta $ .ajax più lunga?
- 12. È necessario inviare un barattolo di scintilla?
- 13. Inviare e ricevere NSData via GameKit
- 14. Socket inviare e ricevere array di byte
- 15. PHP Come inviare pacchetto HTTP raw
- 16. django per inviare E ricevere e-mail?
- 17. Multicast Java UDP, determinare quale gruppo ha inviato il pacchetto
- 18. inviare e ricevere messaggi utilizzando l'API smack
- 19. Impossibile ricevere pacchetti UDP appropriati utilizzando SSDP
- 20. Perché inviare un messaggio dall'estensione WatchKit a iOS e ottenere una risposta è così lento?
- 21. python/dpkt: scopri se il pacchetto è un pacchetto tcp o un pacchetto udp,
- 22. Come inviare e ricevere messaggi broadcast
- 23. Continua a ricevere un mittente (Return-Path, Sender o From) necessario per inviare un messaggio
- 24. posso leggere esattamente un pacchetto UDP da un socket?
- 25. Invia e ricevi oggetto serialize su UDP
- 26. inviare/ricevere dati via Bluetooth
- 27. come inviare HttpRequest e ottenere la risposta Json in Android?
- 28. Invio di una struttura C++ su UDP in Java
- 29. Invia e ricevi dati tramite UDP in PowerShell
- 30. socket di streaming per inviare/ricevere messaggi broadcast?
UDP è un datagramma. Non si ottiene nulla indietro a meno che il destinatario non risponda qualcosa. È lo stesso con una presa TCP. Se ci dici cosa vuoi fare, forse? – Erik
Ok il server esiste già (non è stato scritto da me) dovrebbe restituire qualcosa quando gli mando un pacchetto ma come faccio a ricevere il pacchetto che manda indietro? –
la prima domanda è: il server restituisce udp? Se è così, è necessario leggere dal proprio socket UDP attraverso il metodo Datagram.receive(). – Erik