ברוך הבא לדוגמת תכנות Socket ב-Java. כל שרת הוא תוכנית שרצה על מערכת ספציפית ומאזינה ליציאה ספציפית. Sockets מחוברים למספרי יציאה, וכשאנו מפעילים שרת כלשהו, הוא פשוט מאזין בסוקט וממתין לבקשות מלקוח. לדוגמה, שרת Tomcat הרץ על יציאה 8080 ממתין לבקשות מלקוח, וברגע שהוא מקבל בקשה מלקוח, הוא מגיב להם.
תכנות Socket ב-Java
סוקט הוא קצה אחד של קישור תקשורת דו-כיוונית בין שתי תוכניות הרצות ברשת. הסוקט מחובר למספר יציאה כך ששכבת ה- TCP יכולה לזהות את היישום אליו הנתונים נשלחים. בדוגמת תכנות Socket ב-Java, נלמד איך לכתוב שרת סוקט ב-Java ותוכנית לקוח סוקט ב-Java. נלמד גם כיצד תוכנית לקוח ושרת קוראות וכותבות נתונים על הסוקט. java.net.Socket ו־java.net.ServerSocket הם המחלקות ב-Java שמממשות את הסוקט והשרת שלו.
דוגמא לשרת סוקט ב-Java
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 {
//משתנה סטטי לשרת הסוקטים
private static ServerSocket server;
//פתח פורט שבו השרת יקשיב
private static int port = 9876;
public static void main(String args[]) throws IOException, ClassNotFoundException{
//צור אובייקט שרת סוקט
server = new ServerSocket(port);
//המשך להקשיב באופן בלתי-מוגבל עד שיקבל קריאת 'exit' או שהתוכנית תסתיים
while(true){
System.out.println("Waiting for the client request");
//יצירת סוקט והמתנה לחיבור של לקוח
Socket socket = server.accept();
//קריאה מהסוקט לאובייקט ObjectInputStream
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
//המרת אובייקט ObjectInputStream למחרוזת
String message = (String) ois.readObject();
System.out.println("Message Received: " + message);
//יצירת אובייקט ObjectOutputStream
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
//כתיבת אובייקט לסוקט
oos.writeObject("Hi Client "+message);
//סגירת משאבים
ois.close();
oos.close();
socket.close();
//סיום השרת אם הלקוח שולח בקשת 'exit'
if(message.equalsIgnoreCase("exit")) break;
}
System.out.println("Shutting down Socket server!!");
//סגירת אובייקט ServerSocket
server.close();
}
}
לקוח סוקט ב-Java
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{
//קבלת כתובת ה-IP של המחשב המקומי, אם השרת פועל על כתובת IP אחרת, יש להשתמש בה
InetAddress host = InetAddress.getLocalHost();
Socket socket = null;
ObjectOutputStream oos = null;
ObjectInputStream ois = null;
for(int i=0; i<5;i++){
//הקמת חיבור סוקט לשרת
socket = new Socket(host.getHostName(), 9876);
//כתיבה לסוקט באמצעות ObjectOutputStream
oos = new ObjectOutputStream(socket.getOutputStream());
System.out.println("Sending request to Socket Server");
if(i==4)oos.writeObject("exit");
else oos.writeObject(""+i);
//קריאה לתגובת השרת
ois = new ObjectInputStream(socket.getInputStream());
String message = (String) ois.readObject();
System.out.println("Message: " + message);
//סגירת משאבים
ois.close();
oos.close();
Thread.sleep(100);
}
}
}
כדי לבדוק תכנות גבובת סוקט ב-Java לתקשורת בין שרת ללקוח, נכנס לתוך הקלאס SocketServerExample
. כאשר תפעיל את שרת הסוקט, יודפס "מחכה לבקשת לקוח" וישאר בהמתנה לבקשת הלקוח. כעת, בעת הרצת הקלאס SocketClientExample, יישלח בקשה לשרת הסוקט ב-Java וידפיס את ההודעה בתגובה למסך. הנה הפלט של שרת הסוקט ב-Java מתוך תכנית 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!!
והנה הפלט של לקוח הסוקט ב-Java מתוך התכנית 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
זו כל הסיכום המהיר של תכנות הסוקט ב-Java. אני מקווה שתוכל להתחיל עם תכנות שרת ולקוח סוקט ב-Java. הפניה: מסמך Oracle
Source:
https://www.digitalocean.com/community/tutorials/java-socket-programming-server-client