Verwandte Java -Klasse Einführung
Datagramsocket
public class DatagramSocket extends Object
Diese Klasse stellt einen Socket dar, der zum Senden und Empfangen von Datagrammpaketen verwendet wird.
Datagramm -Sockeln sind die Sende- oder Empfangspunkte von Paket -Lieferdiensten. Jedes Paket, das in einem Datagramm -Socket gesendet oder empfangen wird, wird separat angesprochen und weitergeleitet. Mehrere Pakete, die von einer Maschine zu einer anderen gesendet werden, können unterschiedliche Routen auswählen oder in verschiedenen Bestellungen eintreffen.
Das Senden von UDP -Sendungen ist in Datagramsocket immer aktiviert. Um Broadcast -Pakete zu empfangen, sollte Datagramsocket an eine Wildcard -Adresse gebunden sein. In einigen Implementierungen können auch Broadcast -Pakete empfangen werden, wenn sie an eine spezifischere Adresse gebunden sind.
Daten können über den Senden und Empfangen von Datagramsocket gesendet und empfangen werden.
public void receive(DatagramPacket p) throws IOException
Empfangen Sie Datagrammpakete aus diesem Socket. Wenn diese Methode zurückgibt, ist der Puffer des Datagagampackets mit den empfangenen Daten gefüllt. Das Datagrammpaket enthält auch die IP -Adresse des Absenders und die Portnummer auf dem Maschine des Absenders.
Diese Methode blockiert, bis das Datagramm empfangen wird. Das Längenfeld des Datagram -Paketobjekts enthält die Länge der empfangenen Informationen. Wenn die Informationen länger als die Länge des Pakets sind, werden die Informationen verkürzt
Wenn ein Sicherheitsmanager vorhanden ist und die CheckAccept -Methode des Sicherheitsmanagers den Empfangsvorgang nicht zulässt, kann das Paket nicht empfangen werden.
Parameter:
P-The Datagrampacket, um die eingehenden Daten zu platzieren.
Werfen:
IOException - Wenn ein E/A -Fehler auftritt.
SockettimeoutException - Wenn SetSotimeout zuvor aufgerufen wurde und der Zeitüberschreitungswert abgelaufen ist.
AnreachableException - kann werfen, wenn der Sockel mit dem aktuell nicht erreichbaren Ziel verbunden ist. Beachten Sie, dass es keine Garantie gibt, dass die Ausnahme ausgelöst wird.
IllegalBlockingModeException - Wenn dieser Socket einen zugeordneten Kanal hat und der Kanal im nicht blockierenden Modus befindet.
public void send(DatagramPacket p) throws IOException
Senden Sie Datagrammpakete aus diesem Socket. DataGrampacket enthält Informationen, die angeben: Die zu gesendeten Daten, die Länge, die IP -Adresse des Remote -Hosts und die Portnummer des Remote -Hosts
Wenn ein Sicherheitsmanager vorhanden ist und der Socket derzeit nicht mit der Remote -Adresse verbunden ist, führt diese Methode zunächst einige Sicherheitsüberprüfungen durch. Erstens, wenn p.getAddress (). Ismulticastaddress () wahr ist, ruft diese Methode die Checkmulticast -Methode des Sicherheitsmanagers mit P.GetAddress () als Parameter auf. Wenn der Wert des Ausdrucks falsch ist, wird diese Methode verwendet, um die CheckConnect -Methode des Sicherheitsmanagers mit P.GetAddress (). Gethostaddress () und P.Getport () als Parameter aufzurufen. Wenn der Vorgang nicht zulässig ist, führt jeder Anruf bei der Methode des Sicherheitsmanagers zu einer Sicherheitspflicht.
Parameter:
P-Datagrampacket zu senden.
Werfen:
IOException - Wenn ein E/A -Fehler auftritt.
SecurityException - Wenn der Sicherheitsmanager existiert und seine CheckMulticast- oder CheckConnect -Methoden nicht das Senden zulassen.
AnreachableException - kann werfen, wenn der Sockel mit dem aktuell nicht erreichbaren Ziel verbunden ist. Beachten Sie, dass es keine Garantie gibt, dass die Ausnahme ausgelöst wird.
IllegalBlockingModeException - Wenn dieser Socket einen zugeordneten Kanal hat und der Kanal im nicht blockierenden Modus befindet.
Datagrampacket
public final class DatagramPacket extends Object
Dieser Typ repräsentiert UDP -Datagrammpakete, die zum Implementieren von verbindungslosen Paket -Zustelldiensten verwendet werden
Konstruktionsmethode:
DatagramPacket(byte[]buf,intlength)
Konstruieren Sie DataGrampacket, um Datenpakete mit Länge zu empfangen
DatagramPacket(byte[]buf,intlength,InetAddressaddress,intport)
Konstruieren Sie Datagrammpakete, um Längenpakete an die angegebene Portnummer auf dem angegebenen Host zu senden
Beispiel für das UDP -Gruppen -Chat -System
UDP ist ohne Verbindungen verbunden. Gruppenchat soll Daten an die Rundfunkadresse (Broadcasting -Adresse) senden, damit jeder eine Nachricht erhält. Starten Sie mit der Thread -Methode einen Absender -Thread und den Empfänger -Thread, der Absender liest die Tastatureingabe als Ausgabe. Der Empfänger liest die Eingabeinformationen und zeigt sie an.
Absender
Udpsender.java
Paket cn.xidian.socket; import java.io.bufufferedReader; import Java.io.ioException; import Java.io.inputStreamReader; Import Java.net.Datagrampack; {// uDP Service DataGramSocket Socket erstellen = neuer Datagramsocket (); // Bereiten Sie das Datenpaket zum Senden // Lesen Sie die Eingabe aus dem Systemeingang BufferedReader vor = neuer BufferedReader (New InputStreamReader (System.in)); String Line = null; Der Gruppenchat muss die Broadcast -Adresse schreiben, zum Beispiel: 192.168.137.255Datagrampacket data = new DataGrampacket (line.getBytes (), line.getBytes (). Länge, inetaddress.getByName ("127.0.0.1"), 9090); Socketsocket.CLOSE ();} catch (ioException e) {e.printstacktrace ();}}}Empfänger
Udpreceiver.java
Paket cn.xidian.socket; import Java.io.ioException; importieren java.net.datagrampacket; import Java.net.datagramsocket; öffentliche Klasse udpreceiver erweitert Thread {@Override public void run () {try {// uDP -Dienst an und hört auf datagramsocke und ported datagramsocke und ported datagramsocke und ported datagramsocket = new datagrams (90). Pakete Byte [] temp = new Byte [1024]; DataGrampacket data = new DataGrampacket (temp, temp.Length); boolean flag = true; while (flag) {socket Data.getAddress (). GetHostName (); System.out.println (SENTERHOSTNAME+"("+SENTERADDRESS+")"+"sagt:"+new String (temp, 0, Data.GetLength ()));} // Schließen Sie die Ressourcen -Socket.CLOSS ();Hauptmethode
Udpmain.java
Paket cn.xidian.socket; öffentliche Klasse uDpmain {public static void main (String [] args) {// udpreceiver thread udpreceiver receiver = new udpreceiver (); receiver.start (); // starten udpsender thread utpsender sender = new udpsender ();Testergebnisse
Die Eingabeparty liest die Tastatureingabe als Ausgabe, der Empfänger empfängt die Nachricht und zeigt den IP- und Hostnamen des Absenders an.
Zusammenfassen
Das obige ist der gesamte Inhalt dieses Artikels über Java -Programmierung mit UDP, um Gruppen -Chat -System -Code -Beispiele zu erstellen. Ich hoffe, es wird für alle hilfreich sein. Interessierte Freunde können weiterhin auf andere verwandte Themen auf dieser Website verweisen. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!