Java Socket Programming – Leitfaden
Willkommen zum Beispiel der Java Socket Programming. 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 irgendeinen Server laufen lassen, hört er einfach auf dem Socket und wartet auf Clientanfragen. Zum Beispiel wartet der Tomcat Server, der auf Port 8080 läuft, auf Clientanfragen und sobald er eine Clientanfrage erhält, reagiert er darauf.
Java Socket Programming
Ein Socket ist ein Endpunkt einer Zwei-Wege-Kommunikationsverbindung zwischen zwei Programmen, die im Netzwerk laufen. Der Socket ist an eine Portnummer gebunden, damit die TCP-Schicht die Anwendung identifizieren kann, zu der die Daten gesendet werden sollen. Im Tutorial-Beispiel zur Java Socket Programming werden wir lernen, wie man ein Java Socket Server- und ein Java Socket Client-Programm schreibt. Wir werden auch lernen, wie Server-Client-Programme Daten auf dem Socket lesen und schreiben. 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 {
//static ServerSocket variable
private static ServerSocket server;
//socket server port on which it will listen
private static int port = 9876;
public static void main(String args[]) throws IOException, ClassNotFoundException{
//create the socket server object
server = new ServerSocket(port);
//keep listens indefinitely until receives 'exit' call or program terminates
while(true){
System.out.println("Waiting for the client request");
//creating socket and waiting for client connection
Socket socket = server.accept();
//read from socket to ObjectInputStream object
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
//convert ObjectInputStream object to String
String message = (String) ois.readObject();
System.out.println("Message Received: " + message);
//create ObjectOutputStream object
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
//write object to Socket
oos.writeObject("Hi Client "+message);
//close resources
ois.close();
oos.close();
socket.close();
//terminate the server if client sends exit request
if(message.equalsIgnoreCase("exit")) break;
}
System.out.println("Shutting down Socket server!!");
//close the ServerSocket object
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{
//get the localhost IP address, if server is running on some other IP, you need to use that
InetAddress host = InetAddress.getLocalHost();
Socket socket = null;
ObjectOutputStream oos = null;
ObjectInputStream ois = null;
for(int i=0; i<5;i++){
//establish socket connection to server
socket = new Socket(host.getHostName(), 9876);
//write to socket using ObjectOutputStream
oos = new ObjectOutputStream(socket.getOutputStream());
System.out.println("Sending request to Socket Server");
if(i==4)oos.writeObject("exit");
else oos.writeObject(""+i);
//read the server response message
ois = new ObjectInputStream(socket.getInputStream());
String message = (String) ois.readObject();
System.out.println("Message: " + message);
//close resources
ois.close();
oos.close();
Thread.sleep(100);
}
}
}
Um die Server-Client-Kommunikation der Java Socket Programming zu testen, müssen wir zunächst die Klasse SocketServerExample ausführen. Wenn du den Socket Server laufen lässt, wird er einfach „Warte auf Clientanfrage“ ausgeben und dann auf die Clientanfrage warten. Jetzt, wenn du die Klasse SocketClientExample ausführst, wird sie eine Anfrage an den Java Socket Server senden und die Antwortnachricht auf die Konsole ausgeben. Hier ist der Output des Java Socket Server Programms SocketServerExample.
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 der Output des Java Socket Client Programms SocketClientExample.
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 einen schnellen Überblick über die Socket Programmierung in Java. Ich hoffe, du kannst jetzt mit der Programmierung von Java Socket Server und Java Socket Client beginnen.