Willkommen zum Beispiel für Java Socket-Programmierung. Jeder Server ist ein Programm, das auf einem bestimmten System läuft und auf einem bestimmten Port hört. Sockets sind an die Portnummern gebunden, und wenn wir einen Server starten, hört er einfach auf dem Socket und wartet auf Client-Anfragen. Zum Beispiel wartet der Tomcat-Server, der auf Port 8080 läuft, auf Client-Anfragen und antwortet, sobald er eine Client-Anfrage erhält.
Java Socket-Programmierung
Ein Socket ist ein Endpunkt einer bidirektionalen Kommunikationsverbindung zwischen zwei Programmen im Netzwerk. Das Socket ist an eine Portnummer gebunden, damit die TCP-Schicht die Anwendung identifizieren kann, für die die Daten bestimmt sind. Im Beispiel für die Java-Socket-Programmierung werden wir lernen, wie man Java-Socket-Server und Java-Socket-Client schreibt. Wir werden auch lernen, wie das Server-Client-Programm Daten auf dem Socket liest und schreibt. java.net.Socket und java.net.ServerSocket sind die Java-Klassen, die Socket und Socket-Server implementieren.
Java Socket-Server-Beispiel
package com.journaldev.socket;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.ClassNotFoundException;
import java.net.ServerSocket;
import java.net.Socket;
/**
* This class implements java Socket server
* @author pankaj
*
*/
public class SocketServerExample {
//statische ServerSocket-Variablen
private static ServerSocket server;
//Socket-Server-Port, auf dem er lauschen wird
private static int port = 9876;
public static void main(String args[]) throws IOException, ClassNotFoundException{
//Erstellen Sie das Socket-Server-Objekt
server = new ServerSocket(port);
//Hört unbegrenzt zu, bis ein 'exit'-Aufruf empfangen wird oder das Programm beendet wird
while(true){
System.out.println("Waiting for the client request");
//Socket erstellen und auf Client-Verbindung warten
Socket socket = server.accept();
//Von Socket zu ObjectInputStream-Objekt lesen
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
//ObjectInputStream-Objekt in String umwandeln
String message = (String) ois.readObject();
System.out.println("Message Received: " + message);
//ObjectOutputStream-Objekt erstellen
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
//Objekt in Socket schreiben
oos.writeObject("Hi Client "+message);
//Ressourcen schließen
ois.close();
oos.close();
socket.close();
//Server beenden, wenn der Client eine Exit-Anforderung sendet
if(message.equalsIgnoreCase("exit")) break;
}
System.out.println("Shutting down Socket server!!");
//ServerSocket-Objekt schließen
server.close();
}
}
Java Socket Client
package com.journaldev.socket;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
/**
* This class implements java socket client
* @author pankaj
*
*/
public class SocketClientExample {
public static void main(String[] args) throws UnknownHostException, IOException, ClassNotFoundException, InterruptedException{
//Holen Sie sich die IP-Adresse des lokalen Hosts. Wenn der Server auf einer anderen IP läuft, müssen Sie diese verwenden
InetAddress host = InetAddress.getLocalHost();
Socket socket = null;
ObjectOutputStream oos = null;
ObjectInputStream ois = null;
for(int i=0; i<5;i++){
//Socket-Verbindung zum Server herstellen
socket = new Socket(host.getHostName(), 9876);
//Schreiben Sie mit ObjectOutputStream in den Socket
oos = new ObjectOutputStream(socket.getOutputStream());
System.out.println("Sending request to Socket Server");
if(i==4)oos.writeObject("exit");
else oos.writeObject(""+i);
//Lesen Sie die Antwortnachricht des Servers
ois = new ObjectInputStream(socket.getInputStream());
String message = (String) ois.readObject();
System.out.println("Message: " + message);
//Ressourcen schließen
ois.close();
oos.close();
Thread.sleep(100);
}
}
}
Um die Java-Socket-Programmierung der Server-Client-Kommunikation zu testen, müssen wir zunächst die Klasse SocketServerExample
ausführen. Wenn Sie den Socket-Server starten, wird er lediglich „Warten auf Client-Anfrage“ ausgeben und dann auf die Anfrage des Clients warten. Wenn Sie nun die Klasse SocketClientExample ausführen, wird sie eine Anfrage an den Java-Socket-Server senden und die Antwortnachricht in der Konsole ausgeben. Hier ist die Ausgabe des Java-Socket-Servers SocketServerExample
-Programms.
Waiting for the client request
Message Received: 0
Waiting for the client request
Message Received: 1
Waiting for the client request
Message Received: 2
Waiting for the client request
Message Received: 3
Waiting for the client request
Message Received: exit
Shutting down Socket server!!
Hier ist die Ausgabe des Java-Socket-Clients SocketClientExample
-Programms.
Sending request to Socket Server
Message: Hi Client 0
Sending request to Socket Server
Message: Hi Client 1
Sending request to Socket Server
Message: Hi Client 2
Sending request to Socket Server
Message: Hi Client 3
Sending request to Socket Server
Message: Hi Client exit
Das ist alles für eine kurze Übersicht über die Socket-Programmierung in Java. Ich hoffe, Sie können mit der Java-Socket-Server- und Java-Socket-Client-Programmierung beginnen. Referenz: Oracle Doc
Source:
https://www.digitalocean.com/community/tutorials/java-socket-programming-server-client