Welkom bij het Java Socket-programmeer voorbeeld. Elke server is een programma dat op een specifiek systeem draait en luistert op een specifieke poort. Sockets zijn gebonden aan de poortnummers en wanneer we een server draaien, luistert deze gewoon op de socket en wacht op clientverzoeken. Bijvoorbeeld, de Tomcat-server die draait op poort 8080 wacht op clientverzoeken en zodra het een clientverzoek ontvangt, reageert het daarop.
Java Socket Programmeren
Een socket is een van de twee uiteinden van een tweerichtingscommunicatiekoppeling tussen twee programma’s die op het netwerk draaien. De socket is gebonden aan een poortnummer zodat de TCP-laag de toepassing kan identificeren waarnaar de gegevens moeten worden verzonden. In het voorbeeld van het Java-socketprogrammeren zullen we leren hoe we een Java-socketserver en Java-socketclient-programma kunnen schrijven. We zullen ook leren hoe het server-clientprogramma gegevens leest en schrijft op de socket. java.net.Socket en java.net.ServerSocket zijn de Java-klassen die Socket en Socket-server implementeren.
Voorbeeld van Java Socket Server
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-variabele
private static ServerSocket server;
//poort van de socketserver waarnaar het luistert
private static int port = 9876;
public static void main(String args[]) throws IOException, ClassNotFoundException{
//maak het object van de socketserver aan
server = new ServerSocket(port);
//blijf luisteren totdat je een 'exit'-oproep ontvangt of het programma wordt beëindigd
while(true){
System.out.println("Waiting for the client request");
//creëer de socket en wacht op de verbinding van de client
Socket socket = server.accept();
//lees van de socket naar het ObjectInputStream-object
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
//zet het ObjectInputStream-object om naar een String
String message = (String) ois.readObject();
System.out.println("Message Received: " + message);
//maak het ObjectOutputStream-object aan
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
//schrijf het object naar de socket
oos.writeObject("Hi Client "+message);
//sluit bronnen af
ois.close();
oos.close();
socket.close();
//beëindig de server als de client een exitverzoek verzendt
if(message.equalsIgnoreCase("exit")) break;
}
System.out.println("Shutting down Socket server!!");
//sluit het ServerSocket-object af
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{
//krijg het IP-adres van de localhost, als de server op een ander IP draait, moet je dat gebruiken
InetAddress host = InetAddress.getLocalHost();
Socket socket = null;
ObjectOutputStream oos = null;
ObjectInputStream ois = null;
for(int i=0; i<5;i++){
//maak een socketverbinding met de server
socket = new Socket(host.getHostName(), 9876);
//schrijf naar de socket met ObjectOutputStream
oos = new ObjectOutputStream(socket.getOutputStream());
System.out.println("Sending request to Socket Server");
if(i==4)oos.writeObject("exit");
else oos.writeObject(""+i);
//lees het bericht met de serverrespons
ois = new ObjectInputStream(socket.getInputStream());
String message = (String) ois.readObject();
System.out.println("Message: " + message);
//sluit bronnen af
ois.close();
oos.close();
Thread.sleep(100);
}
}
}
Om Java-socketprogrammering voor server-clientcommunicatie te testen, moeten we eerst de klasse SocketServerExample
uitvoeren. Wanneer je de socketserver uitvoert, zal deze alleen “Wachten op clientverzoek” afdrukken en vervolgens wachten op het clientverzoek. Nu, wanneer je de klasse SocketClientExample uitvoert, zal deze een verzoek naar de Java-socketserver sturen en het antwoordbericht naar de console afdrukken. Hier is de uitvoer van het Java-socketserverprogramma 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 is de uitvoer van het Java-socketclientprogramma 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
Dat is alles voor een snelle samenvatting van socketprogrammering in Java. Ik hoop dat je aan de slag kunt met Java-socketserver- en Java-socketclientprogrammering. Referentie: Oracle Doc
Source:
https://www.digitalocean.com/community/tutorials/java-socket-programming-server-client