
accept, כדי לוודא שהחיבור התקבל, ועוד הדפסה אחרי ששומרים את הלקוח במערך.no more space למקרה שהלולאה מסתיימת בלי למצוא תא פנוי, כדי לדעת מתי המערך מלא.INVALID_SOCKET. הפתרון: לולאה שמציבה INVALID_SOCKET בכל התאים בעת עליית השרת.printf משמש להדפסות זמניות שמסמנות איזה שלב רץ בשרת וללקוח.הטקסט המלא של הדקות הראשונות בהרצאה «תיקון תקלות בשרת» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
טוב אנחנו ממשיכים אז רצתי פה client a וclient b ואת הסרבר מה שאני שם לב זה שאני כותב בclient הזה 111 enter אז הוא כותב את זה כאן וכשאני כותב פה 2222 enter אז הוא לא כותב את זה כאן יפה אז פתחתי פה הvisual studio הזה מריץ את הסרבר הזה הvisual studio הזה מריץ את הclient
הזה הוויז'ול סטודיו הזה מריץ את הקליינט הזה אז אני רוצה לדבק, אז בואו נדבק אז השאלה היא האם הוא בכלל משדר, האם הוא בכלל מקבל יש לי תחושה שמה, שמשהו לא בסדר בצד של השרת, זו התחושה שלי אז השרת זה הוויז'ול סטודיו השמאלי ביותר, אנחנו לא צריכים את זה
ואנחנו כן צריכים את זה, אז השרת, הכובד של השרת ובואו נראה מה יש לנו בשלב, בואו נצמצם, עכבר ימני ואוטליינינג וקולאב ובלי קשר, בואו נניח שהבעיה היא בהתחלה, אז מיין, בואו נעקוב אחרי מיין, מיין עשה קרייט רייט והוא עושה אקספט פרוק,
אז בואו נלך לאקספט פרוק, נעשה אקספט פרוק, אז אקספט פרוק הינה לולה ואני רואה שלא עשינו פה ריג'נים, אה אין ריג'נים בסי פלאס פלאס, נכון מאוד יפה אזי אזי זוהי אקספט פרוק אז השאלה היא איך עובד באמת האקספט פרוק איפה יש לו בכלל את הלולה אז הנה היא הלולאה אז הוא עשה אקספט קודם כל כדאי להדפיס אחרי שהוא עושה אקספט כדאי להדפיס אבל לא רוצה
לעשות שינויים אז אני ארשום אני ארשום לעצמי דברים שאני רוצה לשנות אז בשורה 148 של הסרוור אני רוצה להוסיף הדפסה אחרי אקספט.
אז הכבר אם אני new ו-text document ו-add print, זה הוא printf, אחרי אקספט, אקספט, ואני צריך לסמן שזה בסרוור, in server, שורה איזה? 148?
את לא זוכרת. 148 in server line 148 add printf after accept נקודה שמור go יפה אבל בואו ונניח שזה עבר בשלום אז הוא עושה for ומחפש ככה וככה ומוצא אז גם זה כדאי להגיד שהוא מצא והוא מאחסן אז בשורה 158 אוסף הדפסה שהוא מעקסם אז line 158 add printf client tools ואולי גם את ה-id שלו יפה כל זה
בסרוור זה בעצם בכותרת insert server insert server נעשה את זה עם שווה אם ככה יפה מאוד יפה מאוד הלאה בואו נניח שגם זה עבר בשבילנו הוא פתח קליינט פרוק אגב אם זה ברייק הוא יצא מהפור והוא חוזר לווייל אבל הוא לא מצפיץ שהוא רגע מה קורה אם הוא לא מוצא זאת אומרת הוא עבר על כולם והוא לא מוצא מקום קליינט אם הוא אינוואליד אז הוא מאחסן ויוצר וברייק
מהחיפוש יפה אבל מה קורה אם הוא עובר על הכל ולא מוצא אז איך נדע אם הוא לא מצא לא נדע אם לא נשים פה פלאג זו האפשרות הראשונה, האפשרות השנייה זה אם int i הוא מוכר כאן בחוץ, השאלה היא האם int i מוכר פה בחוץ, i, האם הוא מכיר את i, קונטרול רווח, פעם שעברה הוא היה עם i, נראה שהוא מכיר את i, אז בגרסאות קודמות של c++ הוא הכיר את i גם מחוץ ללולאה, שלא כמו ב-c-sharp
ש-i לא מוכלת מחוץ ללולאה כי העיגון אומר שזה היה בלוק, אז int i הוגדרה מחוץ לבלוק, אז היא אמורה להיות מוכרת אחרי הבלוק.
אבל בגרסה האחרונה של c++ הם אמרו לא, שה-int i יחדל להיות קיים אחרי הבלוק. אז אני לא יודע איך זה הולך לעבוד פה, בואו נגיד שזה יעבוד.
אז אם i שווה ל-size, אז זה לא נמצא. אה, סליחה, אני לא רוצה לכתוב אבל, כי אז הוא לא ייתן לי. אז שורה 162 ללבדוק inline line 162 add if i שווה לסייז printf no more space יפה מאוד אבל לעת עתה לא נעשה ולא כלום נניח שזה עבר בשלום נלך לקליינט פרוק גו דפינישן אנחנו באים לקליינט
פרוק ואנחנו מניחים שגם זה דבר בשלום אז וואלה אל טרו בקיצור הוא אמור היה להדפיס בואו נשים אני כרגע אני מניח שהוא ברסיב אז אני אשים כאן זהו פה יש לנו הדפסות אז אם הוא היה מגיע רצוי בתחילה של סרט גם לשים הדפסה, אז בשורה 47, line 47,
ב-beginning of client proc, in the beginning of client proc, add printf, initializing ID. הוא אמור לדעת את ה-ID, שידפיס, אני מאחל את זה, פה הוא לא אומר כלום.
יפה פה נראה מה קורה אם אני אכתוב פה 333 enter כן הוא לא מגיע אם היה מגיע אליה הוא היה מדפיס משהו אז הוא לא מגיע שאלה אם הוא בכלל יש לו שרד שרד אני יכול לבדוק בעזרת break ו...
שרד לפרוט את הפירק to be deadlocked or is not running any zoom mode code or thread has been stopped זה טוב יופי אין אקספט טרוק וקליינט טרוק אהה רק אחד זה קליינט אבל השרד השני לא נוצר נכון?
ה-thread הראשון, ה-thread הראשון, הנה הוא. הוא נמצא כאילו כאן. למעשה, נו דה דה דה דה קולסטראנק. הוא נמצא למעשה, הוא למעשה נמצא כאן. ה-thread הראשון נמצא במיין בגט שער.
ה-error list לא מעניין בזמן הנמצא, וזה לא מעניין. יפה. וה-accept proc, יפה, נמצא ב-accept. זה צודק. קליינט פרוק נמצא ברסיף, אבל יש רק אחד, אמורים להיות שניים.
מתי הוא מייצר את הקליינט פרוק? כשהאקספט חוזרת, אז הוא מייצר את הקליינט פרוק. כן, מה שעבר אני חושב זה שיש פה name, אנחנו יכולים ל...
זה ה-name, אם אין לו שם, אז הוא מציג את השם של הפונקציה. אתה רואה, למיינדסלד הוא קורא מיינדסלד, נורא נחמד. אנחנו גם יכולים לתת להם שמות, כי אמורים להיות כמה קליינטים, אז הייתי רוצה לראות את ה-ID שלו, למרות שאני יכול תמיד לגשת אליו, לגשת ל-contact ולראות מה ה-id שלו.
אז זה יכול להיות נחמד להוסיף לו שם של ה-thread, זה גם טוב בשבילכם לראות איך עושים את זה, וזה ישבור קצת את השגרה. Client proc, אז ב-initialization של ה-client proc לשנות את ה-thread name.
line, איזה שורה זה? ערך 48 48 in client proc add name id נקרא להם קוראים לו הם נותנים לו שם client proc כשם הפונקציה וזה מיותר כי רואים את הlocation פה אלא אם כן נכנס יותר עמוק אבל אצלנו לא נכנס יותר עמוק מזה אז נציג לקרוא לו id אבל אפשר גם לקרוא לו client id יפה מאוד טוב אז אין לו פה אין לו thread, זה נורא מוזר, בהחלט נורא
מוזר. בואו נראה למה אין לו thread. האמת שאותו אני אהרוג ואני אגש ל-accept proc ונשים פה breakpoint. בואו נראה מה קורה כש-thread חדש, כן, את זה עצרנו אז אני יכול להריץ את זה שוב, פשוט נריץ.
את ה-server גם נריץ כי כרגע הוא תקוע, עצרנו אותו ב-break אז נשחרר אותו, ניתן לו לרוץ ומיד הוא מגיע. אז קליינט בוא נראה מה הסיפור שלו אז הוא לא אינטווליט והדבר הבא שהוא הולך לאתר זה מקום במערך של הקליינט בוא נראה שיש מקום יש לו שני מקומות מעולה אבל זה אפסים הוא מחפש אינטווליט סוקס הוא לא ימצא אינטווליט אז איך את הראשון הוא
דחה זה נורא מוזר בעיניי חוץ מזה שהוא לא מפנה מקום אחרי שהוא מסיים ברגע שהוא מת ברגע שהוא מגיע לכאן הוא צריך לנקות, הייתי אומר פאבליש פה קליינט דיסקונקטד קליינט אין ואליד סוקרט כן אבל הוא צריך להוציא את עצמו מתוך הקליינט זה בסדר הכל טוב לדעתי דבר ראשון הוא צריך לצאת מהקליינט אופס
אני שוב אשנה את זה אז בשורה 69 client 69 remove client from client טוב אז זהו אבל זה לא כזה חשוב כרגע מה שחשוב כרגע זה לראות איך הוא מגיב לניסיון התחברות אז שמנו breakpoint ctrl+b b1 receive זה נחמד אבל זה לא מעניין בשלב הזה ו-B1 יופי זה כבר לא מעניין בשלב זה יופי בואו נמשיך הנה אז אנחנו כבר יודעים את הבעיה אז
עכשיו לא מובן איך זה בכלל עבד איך הראשון עבד אז באמת צריך להתחיל את כל המערכת מחדש ומה שיותר מעניין זה להגיע לברק פוינט הזה בפעם הראשונה אז בתחום של קליינט קליינט איפה הם קליינט הנה קליינט שווה עם ויצוגת יפה מאוד יפה מאוד, יפה מאוד, כל הכבוד, כל הכבוד.
יפה, אז למדנו משהו שאתחול של שדה אחד במערך מאתחל רק את השדה ומאפס את יתרתו. מה אני יכול לעשות? מה שאני יכול זה, אני יכול, על הכל אני יכול, אבל אחד מהדברים זה קופי חצי ימינה פסיק ונשים את זה כאן.
ונשים עוד אחד ועוד אחד וזה, אין לזה צורה. מה שאנחנו צריכים זה לולאה,