"Hej, Amigo!"

"Hej Rishi!"

"Ämnet för dagens lektion är uttag."

"Du vet redan att varje dator i nätverket har sin egen unika IP-adress."

"Japp."

"Föreställ dig nu att du har flera datorer som var och en kör ett dussin program som ansluter till Internet: Skype, ICQ, etc."

"Och de här programmen vill kommunicera med varandra."

"Vi måste hindra dem från att störa varandra. Vi måste göra det så att Skype ansluter till Skype, Slack ansluter till Slack, etc."

"Kommer du ihåg hur det här problemet löstes med webbadresser och webbservrar?"

"Ja, vi har lagt till portar."

"Exakt."

"Det är precis som att göra ett gäng små rum i ett hus och säga att huset är ett hyreshus. Varje hamn är som en separat lägenhet. "

"Om en IP-adress är en unik identifierare för en dator, så är en IP-adress i kombination med en port en unik identifierare för en viss 'lägenhet' i datorn, där ett program kan finnas. "

"Denna unika plats kallas en socket ."

"En socket har sitt eget unika nummer som består av en IP-adress och ett portnummer. "

"Ah. Med andra ord, en socket är en identifierare för någon virtuell datorplats där ett program kan finnas? Och ett annat program skickar meddelanden till denna plats, vilket låter de två programmen kommunicera?"

"Jag vet inte hur du förstod det, men det är helt rätt."

"Min robo-sinne berättade för mig."

"Jättebra. Låt mig då ge dig några detaljer."

"Sockets är faktiskt det mest grundläggande och primitiva sättet för program att kommunicera."

"Java har två klasser för att arbeta med sockets. De är Socket och ServerSocket ."

" ServerSocket är en specialklass vars objekt representerar servern, dvs de låter mig tjänstförfrågningar som kommer till en viss socket."

" Klassen Socket är faktiskt en klientsocket. Vi använder den för att skicka meddelanden till en annan socket och ta emot svaren."

"Så här skickar du ett meddelande till en socket:"

Exempel
// 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();

"Det hela är väldigt likt att ladda ner en fil från Internet."

"Det, min pojke, beror på att uttag används där också."

"Sockets ligger i hjärtat av allt som är associerat med ett nätverk - ja, nästan allt."

"Du kan läsa mer information här "

"Tack för lektionen, Rishi."

"Jag är inte färdig än. Det är önsketänkande."

"Nu ska vi utforska hur en serversocket fungerar."

"Det är lite mer komplicerat."

Exempel
// 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();
}

"Jag vill uppmärksamma er på ett par punkter."

"Punkt 1: För att skapa en (klient) socket måste du ange en IP-adress (eller domännamn) och port. För att skapa en server socket behöver du bara ange en port. Serversocket finns bara på den dator där den var skapad."

"Punkt 2: ServerSocket-klassen har en accept()-metod som väntar på en inkommande anslutning. Med andra ord kommer metoden att köras för alltid tills någon klientsocket försöker ansluta. Då accepterar accept()-metoden anslutningen, skapar en socket objekt för att tillåta kommunikation och returnerar sedan detta objekt."

"Från en Java-programmerares synvinkel är en socket två strömmar: en InputStream från vilken du läser meddelanden/data, och en OutputStream som du skriver meddelanden/data till."

"När du skapar en serversocket, skapar du faktiskt en port som klientsockets på andra datorer kan ansluta till. Men för att göra detta måste de ange portnumret på vår socket och IP-adressen för vår dator korrekt. Tja, eller dess domännamn."

"Här är ett intressant exempel för dig. Du kan prova att gräva i det och köra det:"

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

"Hela poängen där är att använda en serversocket för att skriva en superprimitiv webbserver som du enkelt kan komma åt från en webbläsare."

"Wow! En webbserver? Coolt! Jag ska studera den mycket noggrant."

"Tack, Rishi."

"Det var allt, Amigo. Ta det lugnt!"