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

Canonical ermöglicht Linux-Desktop-Apps mit Flutter (empfohlen)

Das Ziel von Google mit Flutter bestand immer dar...

Methode der Toolbibliothek zur Generierung von Vue-Komponentendokumenten

Inhaltsverzeichnis Analysieren von VUE-Dateien Do...

Mehrere spezifische Methoden zur MySQL-Speicherplatzbereinigung

Inhaltsverzeichnis Vorwort 1. Überprüfen Sie die ...

So verwenden Sie Docker zum lokalen Verpacken und Bereitstellen von Images

Erste Verwendung von Docker zum lokalen Verpacken...

Analyse und Lösung zur Leistungsoptimierung von Vue.js-Anwendungen

Inhaltsverzeichnis 1. Einleitung 2. Warum brauche...

So installieren Sie Docker mit YUM

Wie in der folgenden Abbildung dargestellt: Wenn ...

Zwei Abfragemethoden, wenn der MySQL-Abfragefeldtyp JSON ist

Die Tabellenstruktur ist wie folgt: Ich würde var...

Schritte zur Installation von MySQL 8.0.23 unter Centos7 (Anfängerstufe)

Lassen Sie mich zunächst kurz erklären, was MySQL...

Eine kurze Diskussion über die Rolle von Vue3 defineComponent

Inhaltsverzeichnis defineComponent-Überladungsfun...