logo

מחשבון פשוט באמצעות TCP ב-Java

תְנַאִי מוּקדָם: תכנות Socket ב-Java הרשת פשוט לא מסתיימת בתקשורת חד-כיוונית בין הלקוח לשרת. לדוגמה, חשבו על שרת שקובע זמן שמקשיב לבקשות של הלקוחות ומגיב עם השעה הנוכחית ללקוח. יישומים בזמן אמת בדרך כלל עוקבים אחר מודל תגובה לבקשה לתקשורת. הלקוח בדרך כלל שולח את אובייקט הבקשה לשרת אשר לאחר עיבוד הבקשה שולח את התגובה חזרה ללקוח. במילים פשוטות הלקוח מבקש משאב מסוים זמין בשרת והשרת מגיב למשאב אם הוא יכול לאמת את הבקשה. לדוגמה, כאשר אנטר נלחץ לאחר הזנת כתובת ה-URL הרצויה, נשלחת בקשה לשרת המתאים אשר לאחר מכן עונה על ידי שליחת התגובה בצורה של דף אינטרנט אשר הדפדפנים מסוגלים להציג. במאמר זה מיושם יישום מחשבון פשוט שבו הלקוח ישלח בקשות לשרת בצורה של משוואות אריתמטיות פשוטות והשרת יגיב בחזרה עם התשובה למשוואה.

תכנות בצד הלקוח

השלבים המעורבים בצד הלקוח הם כדלקמן-
  1. פתח את חיבור השקע
  2. תִקשׁוֹרֶת:בחלק התקשורתי יש שינוי קל. ההבדל עם המאמר הקודם טמון בשימוש הן בזרמי הקלט והן בזרמי הפלט לשליחת משוואות ולקבלת התוצאות אל השרת וממנו בהתאמה. DataInputStream ו DataOutputStream משמשים במקום InputStream ו-OutputStream בסיסיים כדי להפוך אותו לבלתי תלוי במכונה. נעשה שימוש בבנאים הבאים -
      Public DataInputStream(InputStream in)
        Syntax:   public DataInputStream(InputStream in)   Parameters:   in - The underlying InputStream. Creates a DataInputStream that uses the specified underlying InputStream.
      Public DataOutputStream(InputStream in)
        Syntax:   public DataOutputStream(OutputStream out)   Parameters:   out - The underlying OutputStream. Creates a DataOutputStream that uses the specified underlying OutputStream.
    לאחר יצירת זרמי הקלט והפלט אנו משתמשים ב-readUTF וב-writeUTF של שיטות הזרמים שנוצרו כדי לקבל ולשלוח את ההודעה בהתאמה.
      מחרוזת final public readUTF() זורק את IOException
      Reads the string encoded using UTF8 encoding.   Throws:   IOException - the stream has been closed and the contained input stream does not support reading after close or another I/O error occurs 
      public final String writeUTF() זורק את IOException
      Writes the string encoded using UTF8 encoding.   Throws:   IOException - the stream has been closed and the contained input stream does not support reading after close or another I/O error occurs 
  3. סגירת החיבור.

יישום צד לקוח

Java
// Java program to illustrate Client Side Programming // for Simple Calculator using TCP import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; import java.util.Scanner; public class Calc_Client {  public static void main(String[] args) throws IOException  {  InetAddress ip = InetAddress.getLocalHost();  int port = 4444;  Scanner sc = new Scanner(System.in);  // Step 1: Open the socket connection.  Socket s = new Socket(ip port);  // Step 2: Communication-get the input and output stream  DataInputStream dis = new DataInputStream(s.getInputStream());  DataOutputStream dos = new DataOutputStream(s.getOutputStream());  while (true)  {  // Enter the equation in the form-  // 'operand1 operation operand2'  System.out.print('Enter the equation in the form: ');  System.out.println(''operand operator operand'');  String inp = sc.nextLine();  if (inp.equals('bye'))  break;  // send the equation to server  dos.writeUTF(inp);  // wait till request is processed and sent back to client  String ans = dis.readUTF();  System.out.println('Answer=' + ans);  }  } } 
תְפוּקָה
Enter the equation in the form: 'operand operator operand' 5 * 6 Answer=30 Enter the equation in the form: 'operand operator operand' 5 + 6 Answer=11 Enter the equation in the form: 'operand operator operand' 9 / 3 Answer=3 

תכנות בצד השרת



השלבים המעורבים בצד השרת הם כדלקמן-
  1. צור חיבור לשקע.
  2. עבדו את המשוואות המגיעות מהלקוח:גם בצד השרת אנו פותחים גם את inputStream וגם את outputStream. לאחר קבלת המשוואה אנו מעבדים אותה ומחזירים את התוצאה חזרה ללקוח על ידי כתיבה ב-outputStream של השקע.
  3. סגור את החיבור.

יישום צד שרת

יסודות סלניום
Java
// Java program to illustrate Server Side Programming // for Simple Calculator using TCP import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.util.StringTokenizer; public class Calc_Server {  public static void main(String args[]) throws IOException  {  // Step 1: Establish the socket connection.  ServerSocket ss = new ServerSocket(4444);  Socket s = ss.accept();  // Step 2: Processing the request.  DataInputStream dis = new DataInputStream(s.getInputStream());  DataOutputStream dos = new DataOutputStream(s.getOutputStream());  while (true)  {  // wait for input  String input = dis.readUTF();  if(input.equals('bye'))  break;  System.out.println('Equation received:-' + input);  int result;  // Use StringTokenizer to break the equation into operand and  // operation  StringTokenizer st = new StringTokenizer(input);  int oprnd1 = Integer.parseInt(st.nextToken());  String operation = st.nextToken();  int oprnd2 = Integer.parseInt(st.nextToken());  // perform the required operation.  if (operation.equals('+'))  {  result = oprnd1 + oprnd2;  }  else if (operation.equals('-'))  {  result = oprnd1 - oprnd2;  }  else if (operation.equals('*'))  {  result = oprnd1 * oprnd2;  }  else  {  result = oprnd1 / oprnd2;  }  System.out.println('Sending the result...');  // send the result back to the client.  dos.writeUTF(Integer.toString(result));  }  } } 
תְפוּקָה:
Equation received:-5 * 6 Sending the result... Equation received:-5 + 6 Sending the result... Equation received:-9 / 3 Sending the result... 
Note: In order to test the above programs on the system please make sure that you run the server program first and then the client one. Make sure you are in the client console and from there enter the equation in the format-'operand1 operator operand2' and press Enter. Answer to the requested equation will be shown in the client console only. Finally to terminate the communication type 'bye' (without quotes) and hit enter. מאמר קשור: מחשבון פשוט באמצעות UDP ב-Java צור חידון