כתיבת תכנית שרת לקוח שמבוססת על הפרוטוקול TCP\IP

תקשורת הוספת תגובה

הסבר האופן שבו שתי תכניות (האחת פועלת כ-server והשניה כ-client) מתקשרות אחת עם השניה באמצעות הפרוטוקול TCP\IP. ההסבר כולל שימוש בדוגמת קוד פשוטה.

SimpleClient.java
SimpleServer.java

9 תגובות ל “כתיבת תכנית שרת לקוח שמבוססת על הפרוטוקול TCP\IP”

  1. התגובה של בארי:

    היי,

    דוגמא מצויינת , אך חסרים כמה אלמנטים..

    1. האם ניתן לקבל יותר אינפורמציה ( *לעוסה ) לגבי מחלקת socket בכדי להבין איך למעשה נוצר הקשר , מה קורה כאשר יש עיקוב או Retransmission וכמובן , האם ניתן להרים את הקישור מעל SSL או דרך מוצפנת אחרת …

    פרק התקשורת שעידכנת מצויין (!) הייתי מוסיף דוגמא או הסבר על איך עובדת אפליקציה כזו בעולם האמיתי , כאשר יש Event Handeling עבור הודעות מסויימות או העברת מבני נתונים בין שרת ללקוח וההיפך..

    בנוסף קבצי הדוגמאות שקישרת , אינם זמינים.

    מאוד נהניתי לקרוא את העדכון.

  2. התגובה של admin:

    תודה על ההערות. הוספתי annotations לוידאו קליפ ואשמח אם תחזור ותפרסם שאלות נוספות מדוייקות כדי שאוכל לשפר את הקליפ.

    לגבי עבודה בעולם האמיתי… רוב העולם האמיתי סובב סביב פיתוח יישומי Java EE שפרק התקשורת בספר זה יכול להוות (במקרה הטוב) העשרה. קיימים מקרים מאד מועטים שבהם יש ביטוי מעשי לנושא של פרק זה.

    למה אתה מתכוון ב-"עיקוב"? לגבי קישור מעל SSL יש לבדוק זאת.

    בנוגע ל-events handling אתה יכול לממש את שמוסבר בפרק טיפול ב-events רק שלא מדובר ב-events שקשורים ב-GUI כך שתצטרך בעצמך לפתח את כל המחלקות וה-interfaces הדרושים.

    אשמח לפידבק נוסף!

    תודה,
    חיים.

    נ.ב. תיקנתי את בעיית הקבצים להורדה.

  3. התגובה של בארי:

    "עיקוב" = יש איטיות או רעש ברשת.

  4. התגובה של admin:

    כאשר בתכנית אחת יש קריאה להפעלת read או מתודה דומה… על אובייקט ה-input stream שיוצא מה-socket וכתוצאה מעיכוב לא מגיעים ה-bytes שמצפים להגעתם אז ה-thread שבו יש קריאה להפעלת read פשוט בהשהייה…. ההפעלה של read פשוט גורמת ל-thread לעצור ולהמתין עד שנתונים יגיעו. בהצלחה, חיים.

  5. התגובה של אורי:

    במדריך שלך בנושא Threading, כתבת שהוספת המילה השמורה synchronized למתודה מחזיקה את הדגל של כל תוכנה, ז"א כל האובייקטים בתוכה.
    אבל מה שקורה בעצם הוא שהדגל של האובייקט הנוכחי this
    מוחזק, ואם המתודה סטאטית אז הדגל של (Class.class) מוחזק.
    כדאי שתבהיר , (או תתקן?) את העניין.

  6. התגובה של בארי:

    האם אפשר להוסיף הדגמה של מעבר אובייקט דרך הSocket ?
    כמו למשל ResultSet ?

  7. התגובה של admin:

    לאורי שלום,

    "הוספת המילה השמורה synchronized למתודה מחזיקה את הדגל של כל תוכנה, ז"א כל האובייקטים בתוכה" - לא זכור לי שכתבתי משפט כזה… תוכל לצטט במדוייק?

    הוספת המילה synchronized לכותרת של המתודה גורמת לכך שכאשר יש קריאה להפעלתה אז המתודה תתחיל לפעול אם ורק אם ה-thread שמפעילה מצליח לקבל לידיו את ה-lock flag של האובייקט שעליו המתודה מופעלת.

    לא התייחסתי בספר למקרה של מתודה סטאטית שמסומנת כ-synchronized…. אם מתודה שמסומנת כ-static היא גם synchronized אז הנעילה אכן מתבצת כפי שהסברת… על האובייקט מהמחלקה Class אשר מתאר את המחלקה שבה המתודה הסטטית האמורה מוגדרת.

    אני אשתדל להוסיף הדגמה של מעבר אובייקטים דרך sockets.

    חיים.

  8. התגובה של אורי:

    יש לשים לב לעובדה , ששימוש במילה השמורה בכותרתה של מתודה הופך את כל תוכנה ל- synchronized block ,במובן
    שכל עוד היא(המתודה) לא תסתיים, ה "lock flag" לא ישוחרר.
    זאת עלול לגרום לכך “lock flag” יוחזק יותר מהדרוש…

    תסכים איתי שלא ברור לאיזה אובייקט שייך הדגל עליו אתה מדבר.

  9. התגובה של admin:

    הופך את כל תוכנה < - הכוונה בתוכנה הוא לתוכן שלה… לא לתוכנה עצמה.

    בכל מקרה, אני מודה להערה שלך וזה עתה סיימתי לעדכן גירסה חדשה של הפרק threads. כעת הטקסט החדש הוא:
    "יש לשים לב לעובדה, ששימוש במילה השמורה synchronized בכותרת של המתודה גורם לכך שכל הקוד שכתוב בתוכה ייחשב לקוד אשר מתוחם ב-synchtonized block באופן שכל עוד שהריצה של המתודה לא הסתיימה, ה-“lock flag”  לא ישוחרר. "

    תודה,
    חיים.

    נ.ב. זה היה יותר עוזר לי אילו היית מוסיף את ההערה כתגובה לפוסט שפירסמתי בו את הפרק threads.

הוספת תגובה

להכנס RSS תגובות RSS פוסטים
WP Theme & Icons by N.Design Studio
התאמה לעברית: We CMS