תכנות גלישת גלגל – דוגמה לשרת גלישת גלגל ב-Java, לקוח

ברוך הבא לדוגמת תכנות 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