"Hallo Amigo!"

"Hallo Rishi!"

"Het onderwerp van de les van vandaag is stopcontacten."

"Je weet al dat elke computer op het netwerk zijn eigen unieke IP-adres heeft."

"Ja."

"Stel je nu voor dat je verschillende computers hebt, elk met een dozijn programma's die toegang hebben tot internet: Skype, ICQ, enz."

"En deze programma's willen met elkaar communiceren."

"We moeten voorkomen dat ze elkaar hinderen. We moeten ervoor zorgen dat Skype verbinding maakt met Skype, Slack verbinding maakt met Slack, enz."

"Weet je nog hoe dit probleem werd opgelost met URL's en webservers?"

"Ja, we hebben poorten toegevoegd."

"Precies."

"Het is net alsof je een aantal kleine kamers in een huis maakt en dan zegt dat het huis een flatgebouw is. Elke poort is als een apart appartement. "

"Als een IP-adres een unieke identificatie is voor een computer, dan is een IP-adres in combinatie met een poort een unieke identificatie voor een bepaald 'appartement' in de computer, waar een programma zich kan bevinden. "

"Deze unieke locatie wordt een socket genoemd ."

“Een socket heeft een eigen uniek nummer dat bestaat uit een IP-adres en een poortnummer.

"Ah. Met andere woorden, een socket is een identificatie voor een virtuele computerlocatie waar een programma zich kan bevinden? En een ander programma stuurt berichten naar deze locatie, waardoor de twee programma's met elkaar kunnen communiceren?"

'Ik weet niet hoe je dat begrepen hebt, maar dat klopt helemaal.'

"Mijn robo-zintuig heeft het me verteld."

"Geweldig. Laat me je dan wat details geven."

"Sockets zijn eigenlijk de meest elementaire en primitieve manier voor programma's om te communiceren."

"Java heeft twee klassen voor het werken met sockets. Dat zijn Socket en ServerSocket ."

" ServerSocket is een speciale klasse waarvan de objecten de server vertegenwoordigen, dwz ze laten me verzoeken verwerken die binnenkomen op een bepaalde socket."

"De Socket- klasse is eigenlijk een client-socket. We gebruiken het om berichten naar een andere socket te sturen en de antwoorden te ontvangen."

"Zo stuur je een bericht naar een socket:"

Voorbeeld
// Create a socket
Socket clientSocket = new Socket("localhost", 4444);

// Get an OutputStream
OutputStream outputStream = clientSocket.getOutputStream();
PrintWriter out = new PrintWriter(outputStream, true);
out.println("Kiss my shiny metal ass!");
out.flush();

// Read the response
InputStream inputStream = clientSocket.getInputStream();
BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));
String answer = in.readLine();

"Het lijkt allemaal erg op het downloaden van een bestand van internet."

'Dat, mijn jongen, komt omdat daar ook stopcontacten worden gebruikt.'

"Sockets vormen de kern van alles wat met een netwerk te maken heeft - nou ja, bijna alles."

"Meer informatie lees je hier "

"Bedankt voor de les, Rishi."

"Ik ben nog niet klaar. Dat is wishful thinking."

"Nu gaan we onderzoeken hoe een serversocket werkt."

"Het is een beetje ingewikkelder."

Voorbeeld
// Create a server socket object
ServerSocket serverSocket = new ServerSocket(4444); // Port

// Process incoming connections in a loop
while (true)
{
 // The accept method waits for someone to connect
 Socket socket = serverSocket.accept();

 // Read the response
 InputStream inputStream = socket.getInputStream();
 BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));
 String message = in.readLine();

 // Create a response - we'll just reverse the string
 String reverseMessage = new StringBuilder(message).reverse().toString();

 // Send the response
 OutputStream outputStream = socket.getOutputStream();
 PrintWriter out = new PrintWriter(outputStream, true);
 out.println(reverseMessage);
 out.flush();
}

"Ik wil uw aandacht vestigen op een paar punten."

"Punt 1: Om een ​​(client)socket aan te maken, moet u een IP-adres (of domeinnaam) en poort opgeven. Om een ​​serversocket aan te maken, hoeft u alleen een poort op te geven. De serversocket bestaat alleen op de computer waarop het was gemaakt."

"Punt 2: De ServerSocket-klasse heeft een accept()-methode die wacht op een inkomende verbinding. Met andere woorden, de methode zal voor altijd worden uitgevoerd totdat een client-socket verbinding probeert te maken. Vervolgens accepteert de accept()-methode de verbinding, maakt een socket object om communicatie toe te staan, en retourneert vervolgens dit object."

"Vanuit het oogpunt van een Java-programmeur bestaat een socket uit twee streams: een InputStream waaruit u berichten/gegevens leest en een OutputStream waarnaar u berichten/gegevens schrijft."

"Als je een serversocket maakt, maak je eigenlijk een poort waarmee client-sockets op andere computers verbinding kunnen maken. Maar om dit te doen, moeten ze het poortnummer van onze socket en het IP-adres van onze computer correct specificeren. Nou, of de domeinnaam."

"Hier is een interessant voorbeeld voor jou. Je kunt proberen erin te graven en het uit te voeren:"

https://www.logicbig.com/tutorials/core-java-tutorial/http-server/http-server-basic.html

"Het hele punt is om een ​​serversocket te gebruiken om een ​​super primitieve webserver te schrijven waartoe je eenvoudig toegang hebt vanuit een browser."

"Wow! Een webserver? Cool! Ik zal het heel zorgvuldig bestuderen."

"Dank je, Rishi."

"Dat is alles, Amigo. Ga ontspannen!"