Codebeispiel für einen einfachen UDP-Server-Client

Codebeispiel für einen einfachen UDP-Server-Client

Ich werde nicht näher auf die Theorie von UDP eingehen. Ich werde Ihnen nur ein HelloWorld-Programm über UDP geben. Der Code ist klar und ich hoffe, er wird Anfängern hilfreich sein!

Natürlich, eigentlich stehe ich auf diesem Gebiet noch ganz am Anfang!

Schreiben Sie zunächst den Servercode. Der Server bindet die lokale IP und den Port, um auf Zugriff zu warten:

Paket udp;

importiere java.io.IOException;
importiere java.net.DatagramPacket;
importiere java.net.DatagramSocket;
importiere java.net.InetSocketAddress;

/**
 * UDP-Dienstklasse */
öffentliche Klasse UdpServerSocket {
	
	privater Byte[] Puffer = neues Byte[1024];
	privater statischer DatagramSocket ds = null;
	privates DatagramPacket-Paket = null;
	private InetSocketAddress socketAddress = null;
	
	/**
	 * Testmethode */
	öffentliche statische void main(String[] args) wirft Exception {
		Zeichenfolge serverHost = "127.0.0.1";
		int ServerPort = 3344;
		UdpServerSocket udpServerSocket = neuer UdpServerSocket(ServerHost,
				serverPort);
		während (wahr) {
			udpServerSocket.receive();
			udpServerSocket.response("Hallo, hast du gegessen?");
		}		
	}

	/**
	 * Konstruktor, Host und Port binden */
	öffentlicher UdpServerSocket(String host, int port) löst Ausnahme aus {
		socketAddress = neue InetSocketAddress(Host, Port);
		ds = neuer DatagramSocket(Socket-Adresse);
		System.out.println("Server gestartet!");
	}

	/**
	 * Datenpakete empfangen. Diese Methode führt zu einer Blockierung des Threads */
	public final String receive() wirft IOException {
		Paket = neues Datagrammpaket (Puffer, Pufferlänge);
		ds.receive(Paket);
		String-Info = neuer String (Paket.getData(), 0, Paket.getLength());
		System.out.println("Informationen erhalten: " + info);
		Rückgabeinfo;
	}

	/**
	 * Senden Sie das Antwortpaket an den Anforderer */
	öffentliche finale void-Antwort (String-Info) wirft IOException {
		System.out.println("Clientadresse: " + packet.getAddress().getHostAddress()
				+ ",port:" + packet.getPort());
		DatagramPacket dp = neues DatagramPacket(Puffer, Pufferlänge, Paket
				.getAddress(), Paket.getPort());
		dp.setData(info.getBytes());
		ds.send(dp);
	}
}

Nach dem Ausführen wird angezeigt, dass der Server erfolgreich ausgeführt wurde, das Programm beginnt, den Port abzuhören, die Empfangsmethode wird blockiert und es wird nur fortgesetzt, wenn Zugriff besteht!

Wenn wir einen Client schreiben, um darauf zuzugreifen, sehen wir, dass die Beispiele im Internet alle direkt ein DatagramSocket-Objekt erstellen, aber tatsächlich wissen wir nicht, welchen Port wir verwenden. Hier werde ich den Port angeben, an den ich binde, wenn ich ihn erstelle. Tatsächlich ist es sehr einfach. Übergeben Sie beim Initialisieren des Objekts einfach einen Port-Parameter.

Wenn Sie hier auf den Client zugreifen, druckt der Client Ihre IP und Ihren Port!

Schauen Sie sich den Client-Code an:

Paket udp;

importiere java.io.*;
importiere java.net.*;

/**
 * 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 = 3344;
		client.send(serverHost, serverPort, ("Hallo, Liebling!").getBytes());
		byte[] bt = client.empfangen();
		System.out.println("Serverantwortdaten: " + new String(bt));
		// Schließen Sie die Verbindung try {
			ds.schließen();
		} Fang (Ausnahme ex) {
			Beispiel: printStackTrace();
		}
	}

	/**
	 * Konstruktor, UDP-Client erstellen */
	öffentliche UdpClientSocket() wirft Ausnahme {
		ds = neuer DatagramSocket(8899); // Als Client an lokalen Port binden }
	
	/**
	 * Dateninformationen an den angegebenen Server senden */
	öffentliche final void send(finaler String-Host, finaler int-Port,
			letztes byte[] bytes) wirft IOException {
		DatagramPacket dp = neues DatagramPacket (Bytes, Bytes.Länge, InetAddress.getByName (Host), Port);
		ds.send(dp);
	}

	/**
	 * Vom angegebenen Server zurückgesendete Daten empfangen */
	öffentliches letztes Byte[] empfangen()
			wirft Ausnahme {
		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;
	}
}

Führen Sie das Programm direkt aus, um den Effekt zu sehen!

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:
  • Detaillierte Erklärung der Python UDP-Programmierung
  • C#-Beispielcode mit TCP/UDP-Protokoll
  • Beispielanalyse eines Java-Netzwerks basierend auf einem UDP-Chat-Programm
  • Beispielcode für simulierte UDP-Kommunikation in Java
  • Python implementiert ein UDP-Programmkommunikationsprozessdiagramm
  • Python implementiert die Dateiübertragung unter dem UDP-Protokoll
  • Beispielanalyse für Java UDP-Kommunikationsclient und -server
  • Prinzipanalyse des UDP-Verbindungsobjekts und Anwendungsbeispiele

<<:  MySQL-Beispiel zum Umwandeln des Geburtsdatums in das Alter und zum Gruppieren und Zählen der Personenanzahl

>>:  Eine kurze Analyse der parallelen MySQL-Replikation

Artikel empfehlen

Vergleich der JS-Array-Loop-Methode und der Effizienzanalyse

Array-Methoden JavaScript bietet viele Array-Meth...

Analyse der Verschachtelungsregeln von XHTML-Tags

In der XHTML-Sprache wissen wir alle, dass das ul...

MySQL Slow Query-Optimierung: Die Vorteile von Limit aus Theorie und Praxis

Oftmals erwarten wir, dass das Abfrageergebnis hö...

Befehl zum Entfernen (Löschen) eines symbolischen Links in Linux

Möglicherweise müssen Sie in Linux manchmal symbo...

Eine kurze Einführung in die MySQL MyCat-Middleware

1. Was ist mycat Ein vollständig Open Source-Groß...

Vue verwendet MockJS, um simulierte Datenfalldetails zu generieren

Inhaltsverzeichnis Installieren Sie Mockjs in Ihr...

Fünf Möglichkeiten zur Implementierung der Vererbung in js

Ausleihen von Konstruktoren Die Grundidee dieser ...

40 Webseiten-Designs mit supergroßen Schriftarten

Heutige Webdesigns neigen dazu, sehr große Schrif...

Verwenden von System.Drawing.Common in Linux/Docker

Vorwort Nachdem das Projekt auf .net Core migrier...

Beispiel für eine Routing-Berechtigungsverwaltungsmethode in Vue2/vue3

1. Es gibt im Allgemeinen zwei Methoden zur Steue...

Lösung für den MySQL-Fehlercode 1064

Wenn die Wörter in der SQL-Anweisung mit den Schl...