PracticU

בניית חדר דיונים

בלי כתוביותעם כתוביות
PracticU › קורס C למתקדמים - עבודה מול חומרה Win32 › בניית חדר דיונים
מילון מושגים:
שרת - מחשב או תוכנה שמספקים שירות למחשבים אחרים (לקוחות) ברשת, למשל אחסון קבצים, אתר אינטרנט או מסד נתונים, ומגיבים לבקשות שלהם.
לקוח - תוכנה או מחשב שפונים לשרת ומבקשים ממנו שירות או מידע, למשל דפדפן שמבקש דף אינטרנט.
לולאה - מבנה בקרה שחוזר על קטע קוד שוב ושוב כל עוד תנאי מתקיים או עבור כל פריט באוסף.
מערך - מבנה נתונים שמאחסן אוסף ערכים מאותו סוג ברצף, שאפשר לגשת אליהם לפי מספר מיקום (אינדקס).
תהליכון - יחידת ביצוע בתוך תהליך, המאפשרת להריץ כמה מהלכים במקביל ולחלוק את אותו זיכרון.

בניית חדר דיונים
השיעור מתחיל לבנות שרת צ'אט פשוט: שרת שמקבל לקוחות רבים, שומר אותם ברשימה, ומעביר לכל לקוח את מה שכתב לקוח אחר.
השלבים העיקריים
1. מעבר משרת לחדר דיונים: השרת הקודם מקבל לקוח אחד, מטפל בו, ומסתיים. לכן צריך לולאה שממשיכה לקבל לקוחות חדשים ולשמור כל אחד מהם.
2. מערך סוקטים: מגדירים מערך קטן בגודל שלוש, כדי לגלות מוקדם מקרי קצה כמו מצב שאין מקום פנוי.
3. מציאת תא פנוי: בכל חיבור חדש סורקים את המערך עד שמוצאים תא עם INVALID_SOCKET, ושם שומרים את הסוקט החדש.
4. אתחול המערך: אתחול המערך נותן אפסים, אבל כל תא צריך INVALID_SOCKET. נרשם to-do למילוי כל התאים.
5. לולאת accept: הלולאה הראשית while true מקבלת חיבורים בלי הפסקה. בשלב הזה, אם accept נכשל, מותר להפיל את השרת כולו.
6. thread לכל לקוח: כדי שלולאת הקבלה לא תיחסם על לקוח אחד, כל לקוח צריך thread נפרד. זה הנושא של השיעור הבא.
שימו לב
- בחדר הדיונים הזה כל הודעה מגיעה לכל הלקוחות חוץ מהשולח. חדרים נפרדים יבואו בהמשך.
אחרי השיעור אפשר לבנות שלד של שרת שמקבל לקוחות רבים ושומר אותם במערך, ולמצוא את התא הפנוי הראשון.
השיעור הבא בקורס: תיקון תקלות בשרת

פרקי ההרצאה: בניית חדר דיונים

  1. 00:00

    מהו חדר דיונים ומה הבעיה בשרת הנוכחי

  2. 01:13

    שרת צ'אט שמעביר הודעות לכל הלקוחות

  3. 02:53

    הכנת הסוקט: startup, getaddrinfo, bind ו-listen

  4. 03:56

    ניהול הלקוחות במערך סוקטים

  5. 04:58

    מערך לקוחות קטן לבדיקת מקרי קצה

  6. 05:56

    לולאה שממתינה ללקוחות חדשים

תמלול ההרצאה: בניית חדר דיונים

הטקסט המלא של הדקות הראשונות בהרצאה «בניית חדר דיונים» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

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

  2. 00:42

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

  3. 01:10

    זה לא עוזר לי כל פעם לחכות לבן אדם, לקבל ממנו ולהדפיס, להתנותק, ואז שוב לקבל את הבן אדם הבא. כי זה לא Chat Server, אנחנו רוצים להיות Chat Server. מה זה Chat Server?

  4. 01:24

    Server של Chat? Chat Server זה שהרבה קליינטים יכולים להתחבר לשרת, וכל קליינט שכותב משהו לשרת, אז השרת מעביר את מה שהקליינט הזה כתב לכל הקליינטים האחרים.

  5. 01:43

    זאת אומרת, הסרבר צריך לקבל כל הזמן קליינטים, לקבל קליינטים, לקבל, לקבל, לקבל, ואת כל הקליינטים לשמור או ברשימה משורשרת או באיזה מערך, לשמור את כל הקליינטים.

  6. 01:58

    וכשאחד מהקליינטים אומר משהו, אז במקום להדפיס או בנוסף על ההדפסה, הסרבר גם אמור לעבור רשימת הקליינטים ולשלוח להם את מה שכתב הקליינט, חוץ מהקליינט שכתב, עכשיו אנחנו לא מחזירים, לא, צ'אט זה, צ'אט, צ'אט זה בדרך כלל, זה קיצור של צ'אט רום, חדר דיונים, חדר דיונים זה אומר אחד מדבר וכולם מקבלים, לא מדובר פה על זוגות או על חדרים,

  7. 02:32

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

  8. 02:58

    אז יש לנו בהתחלה סטארט-אפ, אוקיי, נחמד מאוד, ואז get adder info, יפה מאוד, יצירה, סליחה, של, אתה יודע, של סוקט, התחברות לסוקט, זאת אומרת, חיבור הסוקט לכתובת על השרת, ותחילת ההקשבה על הסוקט, יפה וחילוץ של הקליינט הראשון ואחרי זה הקליינט השני ואחרי זה עוד ועוד קליינטים בקיצור את

  9. 03:43

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

  10. 04:22

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

  11. 04:45

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

  12. 05:08

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

  13. 05:30

    אני רוצה לגלות בזמן פיתוח אם יש לי אז את הבעיה. אוקיי, אז יש לי מערך. את המערך, כמו כל המערכים ב-C וב-C++, אני אאפס.

  14. 05:48

    יפה, אז יש לי שלושה. עכשיו סוקט, אם אתם זוכרים, אז זה בעצם int, f12, תמיד טוב להיזכר. זה בעצם unsigned int מצוין. יפה.

  15. 06:00

    אז את האקסט אנחנו נעשה בלולאה while true אנחנו ב-c++ זו מילה true מוגדרת יפה אבל

לקורס המלא: קורס C למתקדמים אונליין

ההרצאה הקודמת: צד שרת

ההרצאה הבאה: תיקון תקלות בשרת

הרצאות קשורות מקורסים אחרים

  • בניית מודל
  • בניית שלב - חלק 1
  • בניית צ'אט באתר
  • בניית אפליקצית צ'אט - Chat

קורסים נוספים במסלול

  • קורס WinForms - תוכנות רגילות בווינדוס
  • פרויקט מעשי ב-#C - בונים מחשבון פשוט
  • פרויקט מעשי ב-#C - ספר טלפונים
  • פרויקט מעשי ב-#C - תוכנת צייר
  • קורס ADO.NET - חיבור אתר למסד נתונים
  • קורס תכנות מתקדם - #Advanced .NET C