תכנות Java Socket משמש לתקשורת בין היישומים הפועלים על JRE שונים.
תכנות Java Socket יכול להיות מכוון חיבור או חסר חיבור.
מחלקות Socket ו- ServerSocket משמשות לתכנות שקעים מונחה חיבור ומחלקות DatagramSocket ו-DatagramPacket משמשות לתכנות שקעים ללא חיבור.
הלקוח בתכנות socket חייב לדעת שני מידע:
- כתובת IP של שרת, ו
- מספר יציאה.
כאן, אנחנו הולכים ליצור תקשורת לקוח ושרת חד-כיוונית. ביישום זה, הלקוח שולח הודעה לשרת, השרת קורא את ההודעה ומדפיס אותה. כאן נעשה שימוש בשתי מחלקות: Socket ו- ServerSocket. מחלקת Socket משמשת לתקשורת בין לקוח ושרת. באמצעות שיעור זה, אנו יכולים לקרוא ולכתוב הודעה. המחלקה ServerSocket משמשת בצד השרת. שיטת accept() של המחלקה ServerSocket חוסמת את המסוף עד שהלקוח מחובר. לאחר החיבור המוצלח של הלקוח, הוא מחזיר את המופע של Socket בצד השרת.
כיתת שקעים
שקע הוא פשוט נקודת קצה לתקשורת בין המכונות. ניתן להשתמש במחלקה 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 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(); }}