Muszę wysłać pakiet UDP i uzyskać odpowiedź z powrotem z serwera UDP. Chociaż UDP było analogiczne do java.net.DatagramPacket w Javie, ale dokumentacja dla DatagramPacket wydaje się, że wysyłasz pakiet, ale nic nie odzyskujesz, czy to jest właściwa rzecz, czy powinienem używać java. net.SocketNależy wysłać pakiet UDP i otrzymać odpowiedź w Javie
Odpowiedz
Przykład datagram UDP wysyłania i odbierania (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();
}
}
To wygląda dobrze, ale wydaje się, że nie ma zdefiniowanej długości pakietu dla serwera, tzn. Nie sądzę, że długość pakietu zwróconego przez serwer jest zawsze taka sama, więc czy muszę po prostu upewnić się, że receiveData bufor jest wystarczająco duży, aby obsłużyć największy możliwy rozmiar pakietu. –
Tak. Protokół UDP jest zawodnym protokołem i rzadko jest używany do przesyłania dużych porcji danych. Jednak po odebraniu pakietu można odczytać faktyczną ilość bajtów zawartych w 'DatagramPacket.getLength()'. – bezmax
'receivePacket.getData()' nie tylko zawiera odebrane dane. Zawiera też nieużywaną część bufora. Aby uzyskać ciąg z odebranymi danymi, użyj 'new String (receivePacket.getData(), 0, receivePacket.getLength(), StandardCharsets.UTF_8)' i dostosuj zestaw znaków do tego, czego oczekujesz. –
Musisz użyć DatagramPacket i DatagramSocket. Kiedy wysyłasz pakiet, właśnie wysyłasz pakiet. Jednak po odebraniu pakietu można dostać pakiet, który został wysłany z innego programu (na przykład serwery odpowiadać)
http://docs.oracle.com/javase/7/docs/api/java/net/DatagramSocket.html
Gniazdo jest tylko dla połączeń TCP.
Dokumentacja Java nie obejmuje jak napisać klienta i serwera.
http://docs.oracle.com/javase/tutorial/networking/datagrams/clientServer.html
Chcesz spojrzeć na DatagramSocket#receive
To właśnie rozróżnienie pomiędzy gniazdami TCP i UDP.
UDP jest nadawane, natomiast TCP z java.net.Socket jest point to point. UDP jest fire-and-forget, analogicznie do publikowania wiadomości w temacie JMS.
Zobacz: http://docs.oracle.com/javase/tutorial/networking/datagrams/index.html
UDP nie jest rozgłaszany. Transmisja jest rzeczą na poziomie IP. – OrangeDog
- 1. Jak wysłać żądanie HTTP POST i otrzymać odpowiedź?
- 2. Jak wysłać i otrzymać powiadomienie?
- 3. Jak wysłać pakiet UDP z określonego interfejsu w systemie Linux?
- 4. Jak wysłać pakiet UDP z Web RTC - JavaScript?
- 5. Jak otrzymać odpowiedź STRING z RestTemplate postForLocation?
- 6. Jak mogę otrzymać pakiet "rcom"?
- 7. Jak wysłać wezwanie na spotkanie iCal za pomocą Java Mail i otrzymać odpowiedź
- 8. Wysyłanie i odbieranie obiektu serializacji na UDP
- 9. Wysyłanie i odbieranie danych przez UDP w PowerShell
- 10. jak wysłać tylko odpowiedź 200 w node.js
- 11. jak wysłać HttpRequest i uzyskać odpowiedź Json w systemie Android?
- 12. Jak wysłać prostą odpowiedź json w Rails?
- 13. Jak wysłać dane w czasie rzeczywistym przez UDP?
- 14. Jak wysłać i otrzymać żądanie ajax z parametrem w Spring Framework?
- 15. Jak mogę zakończyć odpowiedź i wysłać kod HTTP 404?
- 16. Limit czasu wykreślania UDP
- 17. Jak wysłać odpowiedź od przechwytywacza i wstrzymać dalszą realizację?
- 18. użyciu python urllib2 wysłać żądanie POST i uzyskać odpowiedź
- 19. Transmisja UDP w języku Java
- 20. Węzeł JS: Serwer i klient Ping UDP
- 21. Nie można wysłać formularza pocztowego w Javie
- 22. Wysyłanie pakietu UDP w języku C#
- 23. MediaRecorder i UDP (DatagramSocket) w systemie Android
- 24. Jak wysłać pakiet UDP do określonego komputera, gdy cały komputer w sieci ma ten sam publiczny adres IP?
- 25. iOS - jak utworzyć żądanie SOAP i otrzymać odpowiedź na pytanie dotyczące problemu
- 26. Python i UDP słuchania
- 27. C#: UDP Listener Thread
- 28. Jak mogę wysłać odpowiedź json w kontrolerze symfony2
- 29. Jak wysłać odpowiedź, ale kontynuować realizację w Sinatrze?
- 30. Niezawodne pytanie metody UDP i ACK
UDP to datagram. Nic nie odzyskasz, dopóki odbiorca nie wyśle czegoś z powrotem. Tak samo jest z gniazdem tcp. Jeśli powiesz nam, co chcesz robić, może? – Erik
OK, serwer już istnieje (nie napisany przeze mnie) powinien wysłać coś z powrotem, gdy wyślę pakiet, ale jak mogę otrzymać pakiet, który odsyła? –
Pierwsze pytanie brzmi: czy serwer wysyła udp z powrotem? Jeśli tak, musisz odczytać z własnego gniazda UDP za pomocą metody Datagram.receive(). – Erik