Ich habe bereits zuvor ein Beispiel geschrieben, ein einfaches UDP-Server- und Client-Beispiel. Darin habe ich beschrieben, dass der Client seinen eigenen Port zum Senden von Daten angeben kann, wenn Sie sich als Client betrachten. ds.setSoTimeout(5000); ist das Timeout für die Datenerfassung. Wenn es nicht festgelegt ist, bedeutet dies eine Wartezeit, die länger ist als die Wartezeit in Liebesfilmen in Fernsehdramen, und das Ergebnis ist dasselbe, d. h. Sie warten, bis Sie sterben, und hören dann auf zu warten. Diese Zeitüberschreitung kann jedoch nicht als die Zeitüberschreitung Ihrer Anfrage angesehen werden. Bitte beachten Sie dieses Konzept, da diese Zeitüberschreitung nur dazu dient, zu kennzeichnen, dass während dieser Zeit keine Daten aus dem Netzwerk abgerufen wurden. Selbst wenn die Daten abgerufen werden, sind sie möglicherweise nicht Ihre. Sie werden dies verstehen, wenn Sie sich das folgende Beispiel ansehen. Dann gibt es noch das Portproblem. Wie oben erwähnt, können Sie den Port selbst angeben oder sich selbst als Client behandeln. Wenn Sie Daten senden müssen, erstellen Sie ein Verbindungsobjekt und senden dann Daten. Auf diese Weise ist der Port dynamisch. Dies bedeutet, dass der lokal geöffnete UDP-Port nicht geschlossen wird, solange das DatagramSocket-Objekt nicht neu initialisiert wird oder verschwindet. Dann gibt es noch das Problem des UDP-Status. Tatsächlich gibt es dazu bereits einen Artikel: „Understanding and Using UDP Connection Objects“. Zustandslos bedeutet, dass diese Verbindung keinen Zustand hat. Niemand weiß, ob sie einen Server hat oder nicht, und niemand weiß, ob der Server tot ist oder nicht. Aber für den lokalen Port gilt: Wenn Ihr DatagramSocket-Objekt immer existiert, dann ist Ihr lokaler Port zustandsbehaftet und aktiv. Dann machen Sie ein Beispiel: Pakettest; importiere java.io.*; importiere java.net.*; importiere java.util.Arrays; /** * UDP-Client-Programm, das zum Senden von Daten an den Server und zum Empfangen der Antwortinformationen des Servers verwendet wird */ öffentliche Klasse UdpClientSocket { privater Byte[] Puffer = neues Byte[1024]; privater statischer DatagramSocket ds = null; /** * Testen Sie die Methode des Clients zum Senden von Paketen und Empfangen von Antwortinformationen */ öffentliche statische void main(String[] args) wirft Exception { UdpClientSocket-Client = neuer UdpClientSocket(); Zeichenfolge serverHost = "127.0.0.1"; int ServerPort = 10002; client.send(Server-Host, Server-Port, neues Byte[]{1,2,3,4,5}); während(wahr){ byte[] bt = client.empfangen(); wenn(null != bt && bt.length > 0) System.out.println("Empfangene Daten: " + Arrays.toString(bt)); Thread.sleep(1000); } } /** * Konstruktor, UDP-Client erstellen */ öffentliche UdpClientSocket() wirft Ausnahme { ds = neuer DatagramSocket(8899); // Als Client an lokalen Port binden ds.setSoTimeout(5000); } /** * Dateninformationen an den angegebenen Server senden */ public final void send(final String host, final int port, final byte[] bytes) throws IOException { DatagramPacket dp = neues DatagramPacket (Bytes, Bytes.Länge, InetAddress.getByName (Host), Port); ds.send(dp); } /** * Vom angegebenen Server zurückgesendete Daten empfangen */ öffentliches finales byte[] receive() löst Exception aus { versuchen { DatagramPacket dp = neues DatagramPacket(Puffer, Pufferlänge); ds.empfangen(dp); byte[] Daten = neues byte[dp.getLength()]; System.arraycopy(dp.getData(), 0, Daten, 0, dp.getLength()); Daten zurückgeben; } Fang (Ausnahme e) { e.printStackTrace(); gibt null zurück; } } } Beim Ausführen wird immer ein Fehler gemeldet:
Verwenden Sie TCPUDPDbg, um Daten an 8899 zu senden und Sie können Folgendes empfangen: Empfangene Daten: [16, 17, 18, 19, 20] Dieses Beispiel wurde geschrieben 1. Der lokale Port ist 8899 2. Das Timeout für den Datenempfang beträgt 5 Sekunden 3. Ein Datensatz wurde an den lokalen Port 10002 gesendet. Wer weiß, ob er empfangen wurde? 4. Kontinuierlich UDP-Daten abrufen, die auf dem lokalen Port 8899 empfangen werden Dann gefunden 1. Beim Senden von Daten wird kein Fehler gemeldet 2. Die Fehlermeldung "Timeout der Datenerfassung" wird immer angezeigt 3. Verwenden Sie TCPUDPDbg, um Daten an 8899 zu senden und sie können empfangen werden Zusammenfassen: 1.UDP kann ein Timeout für den Datenempfang angeben, das Timeout für jede Anforderung muss jedoch von Ihnen selbst gesteuert werden 2.UDP kann die lokale Portnummer binden, und dieser Port kann in einem Zustand überleben 3.UDP hat keinen Status, aber lokal kann haben Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird. Das könnte Sie auch interessieren:
|
<<: Der Unterschied zwischen Löschen, Abschneiden und Löschen und wie man wählt
>>: Detaillierte Beschreibung von Shallow Copy und Deep Copy in js
Inhaltsverzeichnis Einführung Installieren Anzeig...
Inhaltsverzeichnis 1. Master-Slave-Synchronisatio...
Hintergrund Bei der Data-Warehouse-Modellierung w...
Vor einiger Zeit musste ich für die Entwicklung h...
In diesem Artikelbeispiel wird der spezifische Co...
Nachdem Sie VMware installiert und eine neue virt...
Bei Verwendung einer Oracle-Datenbank für Fuzzy-A...
Klicken Sie auf den Ankerlink, um reibungslos zu ...
Die Optimierung großer Datenbankdatenmengen ist e...
Der spezifische Code des mit Js erstellten Schieb...
Als Tester müssen Sie während des Lernprozesses h...
jQuery realisiert den Effekt der Sitzplatzauswahl...
Installieren Sie Fastdfs auf Docker Mount-Verzeic...
Vor einiger Zeit stieß ich auf das Problem, dass ...
Zuvor haben wir Docker verwendet, um das SpringBo...