logo

תכנות Java Socket

תכנות Java Socket משמש לתקשורת בין היישומים הפועלים על JRE שונים.

תכנות Java Socket יכול להיות מכוון חיבור או חסר חיבור.

מחלקות Socket ו- ServerSocket משמשות לתכנות שקעים מונחה חיבור ומחלקות DatagramSocket ו-DatagramPacket משמשות לתכנות שקעים ללא חיבור.

הלקוח בתכנות socket חייב לדעת שני מידע:

  1. כתובת IP של שרת, ו
  2. מספר יציאה.

כאן, אנחנו הולכים ליצור תקשורת לקוח ושרת חד-כיוונית. ביישום זה, הלקוח שולח הודעה לשרת, השרת קורא את ההודעה ומדפיס אותה. כאן נעשה שימוש בשתי מחלקות: Socket ו- ServerSocket. מחלקת Socket משמשת לתקשורת בין לקוח ושרת. באמצעות שיעור זה, אנו יכולים לקרוא ולכתוב הודעה. המחלקה ServerSocket משמשת בצד השרת. שיטת accept() של המחלקה ServerSocket חוסמת את המסוף עד שהלקוח מחובר. לאחר החיבור המוצלח של הלקוח, הוא מחזיר את המופע של Socket בצד השרת.

תכנות Socket ב-Java

כיתת שקעים

שקע הוא פשוט נקודת קצה לתקשורת בין המכונות. ניתן להשתמש במחלקה Socket ליצירת שקע.

שיטות חשובות

שיטהתיאור
1) הציבור InputStream getInputStream()מחזיר את InputStream המחובר לשקע זה.
2) Public OutputStream getOutputStream()מחזיר את OutputStream המחובר לשקע זה.
3) סגירת ריק מסונכרן ציבורי()סוגר את השקע הזה

מחלקה ServerSocket

ניתן להשתמש במחלקה ServerSocket ליצירת שקע שרת. אובייקט זה משמש ליצירת תקשורת עם הלקוחות.

שיטות חשובות

שיטהתיאור
1) Public Socket accept()מחזיר את השקע ויוצר חיבור בין שרת ללקוח.
2) סגור ריק מסונכרן ציבורי()סוגר את שקע השרת.

דוגמה לתכנות Java Socket

יצירת שרת:

כדי ליצור את יישום השרת, עלינו ליצור את המופע של מחלקה ServerSocket. כאן אנו משתמשים במספר יציאת 6666 לתקשורת בין הלקוח לשרת. אתה יכול גם לבחור כל מספר יציאה אחר. שיטת accept() מחכה ללקוח. אם לקוחות מתחברים למספר היציאה הנתון, הוא מחזיר מופע של Socket.

 ServerSocket ss=new ServerSocket(6666); Socket s=ss.accept();//establishes connection and waits for the client 

לקוח יוצר:

כדי ליצור את יישום הלקוח, עלינו ליצור את המופע של מחלקה Socket. כאן, עלינו להעביר את כתובת ה-IP או שם המארח של השרת ומספר יציאה. כאן, אנו משתמשים ב-'localhost' מכיוון שהשרת שלנו פועל על אותה מערכת.

 Socket s=new Socket('localhost',6666); 

בוא נראה תכנות פשוט של שקע Java שבו הלקוח שולח טקסט והשרת מקבל ומדפיס אותו.

קובץ: MyServer.java

 import java.io.*; import java.net.*; public class MyServer { public static void main(String[] args){ try{ ServerSocket ss=new ServerSocket(6666); Socket s=ss.accept();//establishes connection DataInputStream dis=new DataInputStream(s.getInputStream()); String str=(String)dis.readUTF(); System.out.println('message= '+str); ss.close(); }catch(Exception e){System.out.println(e);} } } 

קובץ: MyClient.java

 import java.io.*; import java.net.*; public class MyClient { public static void main(String[] args) { try{ Socket s=new Socket('localhost',6666); DataOutputStream dout=new DataOutputStream(s.getOutputStream()); dout.writeUTF('Hello Server'); dout.flush(); dout.close(); s.close(); }catch(Exception e){System.out.println(e);} } } 
הורד את הדוגמה הזו

כדי להפעיל תוכנית זו פתח שתי פקודות והפעל כל תוכנית בכל שורת פקודה כפי שמוצג באיור למטה.

לאחר הפעלת יישום הלקוח, תוצג הודעה במסוף השרת.

תכנות Java Networking

דוגמה לתכנות Java Socket (קריאה-כתיבה משני הצדדים)

בדוגמה זו, הלקוח יכתוב תחילה לשרת ואז השרת יקבל וידפיס את הטקסט. לאחר מכן השרת יכתוב ללקוח והלקוח יקבל וידפיס את הטקסט. הצעד ממשיך.

קובץ: MyServer.java

 import java.net.*; import java.io.*; class MyServer{ public static void main(String args[])throws Exception{ ServerSocket ss=new ServerSocket(3333); Socket s=ss.accept(); DataInputStream din=new DataInputStream(s.getInputStream()); DataOutputStream dout=new DataOutputStream(s.getOutputStream()); BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); String str='',str2=''; while(!str.equals('stop')){ str=din.readUTF(); System.out.println('client says: '+str); str2=br.readLine(); dout.writeUTF(str2); dout.flush(); } din.close(); s.close(); ss.close(); }} 

קובץ: MyClient.java

 import java.net.*; import java.io.*; class MyClient{ public static void main(String args[])throws Exception{ Socket s=new Socket('localhost',3333); DataInputStream din=new DataInputStream(s.getInputStream()); DataOutputStream dout=new DataOutputStream(s.getOutputStream()); BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); String str='',str2=''; while(!str.equals('stop')){ str=br.readLine(); dout.writeUTF(str); dout.flush(); str2=din.readUTF(); System.out.println('Server says: '+str2); } dout.close(); s.close(); }}