"హాయ్, అమిగో!"

"హలో, రిషీ!"

"నేటి పాఠం యొక్క అంశం సాకెట్లు."

"నెట్‌వర్క్‌లోని ప్రతి కంప్యూటర్‌కు దాని స్వంత ప్రత్యేక IP చిరునామా ఉందని మీకు ఇప్పటికే తెలుసు."

"అవును."

"ఇప్పుడు మీరు అనేక కంప్యూటర్‌లను కలిగి ఉన్నారని ఊహించుకోండి, ప్రతి ఒక్కటి ఇంటర్నెట్‌ను యాక్సెస్ చేసే డజను ప్రోగ్రామ్‌లను నడుపుతోంది: స్కైప్, ICQ, మొదలైనవి."

"మరియు ఈ ప్రోగ్రామ్‌లు ఒకదానితో ఒకటి కమ్యూనికేట్ చేయాలనుకుంటున్నాయి."

"మనం ఒకరితో ఒకరు జోక్యం చేసుకోకుండా వాటిని ఆపాలి. స్కైప్ స్కైప్‌తో కనెక్ట్ అయ్యేలా చేయాలి, స్లాక్ స్లాక్‌తో కనెక్ట్ అవుతుంది మొదలైనవి."

"URLలు మరియు వెబ్ సర్వర్‌లతో ఈ సమస్య ఎలా పరిష్కరించబడిందో గుర్తుందా?"

"అవును, మేము పోర్టులను జోడించాము."

"సరిగ్గా."

"ఇంట్లో చిన్న చిన్న గదులు కట్టి ఇల్లు అపార్ట్ మెంట్ బిల్డింగ్ అని చెప్పినట్లే. ఒక్కో పోర్ట్ ఒక్కో అపార్ట్ మెంట్ లాగా ఉంటుంది. "

"ఒక IP చిరునామా కంప్యూటర్‌కు ప్రత్యేకమైన ఐడెంటిఫైయర్ అయితే, పోర్ట్‌తో కలిపిన IP చిరునామా కంప్యూటర్‌లోని నిర్దిష్ట 'అపార్ట్‌మెంట్' కోసం ఒక ప్రత్యేక ఐడెంటిఫైయర్, ఇక్కడ ప్రోగ్రామ్ నివసించవచ్చు. "

"ఈ ప్రత్యేక స్థానాన్ని సాకెట్ అంటారు ."

"ఒక సాకెట్ దాని స్వంత ప్రత్యేక సంఖ్యను కలిగి ఉంటుంది, అది IP చిరునామా మరియు పోర్ట్ నంబర్‌ను కలిగి ఉంటుంది. "

"ఆహ్. మరో మాటలో చెప్పాలంటే, ఒక ప్రోగ్రామ్ నివసించగలిగే కొన్ని వర్చువల్ కంప్యూటర్ స్థానానికి సాకెట్ అనేది ఐడెంటిఫైయర్? మరియు మరొక ప్రోగ్రామ్ ఈ స్థానానికి సందేశాలను పంపుతుంది, ఇది రెండు ప్రోగ్రామ్‌లను కమ్యూనికేట్ చేయడానికి అనుమతిస్తుంది?"

"మీరు దీన్ని ఎలా అర్థం చేసుకున్నారో నాకు తెలియదు, కానీ అది సరైనది."

"నా రోబో-సెన్స్ నాకు చెప్పింది."

"అద్భుతం. అప్పుడు నేను మీకు కొన్ని వివరాలు చెప్తాను."

"సాకెట్లు వాస్తవానికి కమ్యూనికేట్ చేయడానికి ప్రోగ్రామ్‌లకు అత్యంత ప్రాథమిక మరియు ప్రాచీన మార్గం."

"సాకెట్‌లతో పనిచేయడానికి జావాకు రెండు తరగతులు ఉన్నాయి. అవి సాకెట్ మరియు సర్వర్‌సాకెట్ ."

" సర్వర్‌సాకెట్ అనేది ఒక ప్రత్యేక తరగతి, దీని వస్తువులు సర్వర్‌ను సూచిస్తాయి, అనగా అవి ఒక నిర్దిష్ట సాకెట్‌లో వచ్చే సేవా అభ్యర్థనలను నాకు అనుమతిస్తాయి."

" సాకెట్ క్లాస్ వాస్తవానికి క్లయింట్ సాకెట్. మేము దానిని మరొక సాకెట్‌కు సందేశాలను పంపడానికి మరియు ప్రతిస్పందనలను స్వీకరించడానికి ఉపయోగిస్తాము."

"సాకెట్‌కి సందేశాన్ని ఎలా పంపాలో ఇక్కడ ఉంది:"

ఉదాహరణ
// 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();

"ఇంటర్నెట్ నుండి ఫైల్‌ను డౌన్‌లోడ్ చేయడానికి ఇది చాలా పోలి ఉంటుంది."

"అది, నా అబ్బాయి, ఎందుకంటే అక్కడ కూడా సాకెట్లు ఉపయోగించబడతాయి."

"నెట్‌వర్క్‌తో అనుబంధించబడిన ప్రతిదాని యొక్క గుండె వద్ద సాకెట్లు ఉన్నాయి - బాగా, దాదాపు ప్రతిదీ."

"మీరు అదనపు సమాచారాన్ని ఇక్కడ చదవవచ్చు "

"పాఠానికి ధన్యవాదాలు, రిషీ."

"నేను ఇంకా పూర్తి చేయలేదు. అది కోరికతో కూడిన ఆలోచన."

"ఇప్పుడు మేము సర్వర్ సాకెట్ ఎలా పనిచేస్తుందో అన్వేషిస్తాము."

"ఇది కొంచెం క్లిష్టంగా ఉంది."

ఉదాహరణ
// 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();
}

"నేను మీ దృష్టిని రెండు పాయింట్లపైకి ఆకర్షించాలనుకుంటున్నాను."

"పాయింట్ 1: (క్లయింట్) సాకెట్‌ని సృష్టించడానికి, మీరు IP చిరునామా (లేదా డొమైన్ పేరు) మరియు పోర్ట్‌ను పేర్కొనాలి. సర్వర్ సాకెట్‌ని సృష్టించడానికి, మీరు పోర్ట్‌ను మాత్రమే పేర్కొనాలి. సర్వర్ సాకెట్ కంప్యూటర్‌లో మాత్రమే ఉంటుంది అది సృష్టించబడింది."

"పాయింట్ 2: సర్వర్‌సాకెట్ క్లాస్‌లో ఇన్‌కమింగ్ కనెక్షన్ కోసం వేచి ఉండే అంగీకార () పద్ధతి ఉంది. మరో మాటలో చెప్పాలంటే, కొన్ని క్లయింట్ సాకెట్ కనెక్ట్ చేయడానికి ప్రయత్నించే వరకు ఈ పద్ధతి ఎప్పటికీ అమలులో ఉంటుంది. ఆపై అంగీకరించు() పద్ధతి కనెక్షన్‌ని అంగీకరిస్తుంది, సాకెట్‌ను సృష్టిస్తుంది. ఆబ్జెక్ట్ కమ్యూనికేషన్‌ని అనుమతించి, ఆపై ఈ వస్తువును తిరిగి ఇస్తుంది."

"జావా ప్రోగ్రామర్ దృక్కోణం నుండి, సాకెట్ అనేది రెండు స్ట్రీమ్‌లు: మీరు సందేశాలు/డేటాను చదివే ఇన్‌పుట్ స్ట్రీమ్ మరియు మీరు సందేశాలు/డేటా వ్రాసే అవుట్‌పుట్ స్ట్రీమ్."

"మీరు సర్వర్ సాకెట్‌ను సృష్టించినప్పుడు, మీరు వాస్తవానికి ఇతర కంప్యూటర్‌లలోని క్లయింట్ సాకెట్‌లు కనెక్ట్ చేయగల పోర్ట్‌ను తయారు చేస్తున్నారు. కానీ దీన్ని చేయడానికి, వారు మా సాకెట్ యొక్క పోర్ట్ నంబర్ మరియు మా కంప్యూటర్ యొక్క IP చిరునామాను సరిగ్గా పేర్కొనాలి. సరే, లేదా దాని డొమైన్ పేరు."

"మీ కోసం ఇక్కడ ఒక ఆసక్తికరమైన ఉదాహరణ ఉంది. మీరు దాన్ని త్రవ్వి, దాన్ని అమలు చేయడానికి ప్రయత్నించవచ్చు:"

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

"మీరు కేవలం బ్రౌజర్ నుండి యాక్సెస్ చేయగల సూపర్ ప్రిమిటివ్ వెబ్ సర్వర్‌ను వ్రాయడానికి సర్వర్ సాకెట్‌ను ఉపయోగించడం మొత్తం పాయింట్."

"వావ్! వెబ్ సర్వర్? కూల్! నేను దానిని చాలా జాగ్రత్తగా అధ్యయనం చేస్తాను."

"ధన్యవాదాలు, రిషీ."

"అంతే అమీగో. గో రిలాక్స్!"