
winsock2.h ומוסיפים את הספרייה ws2_32.lib להגדרות ה-Linker. לפני ה-include מגדירים WIN32_LEAN_AND_MEAN, כדי ש-windows.h לא ייכלל אוטומטית ויתנגש עם Winsock.WSAStartup עם גרסה 2.2 ובודקים את הערך שמוחזר. ערך שונה מאפס מסמן כשל.getaddrinfo ממיר את שם המחשב, בדוגמה 127.0.0.1 שהוא המחשב המקומי, לכתובת IP ולפורט. הפונקציה מקבלת מצביע למצביע, כי היא צריכה לעדכן את המצביע עצמו ולא רק את הערך שהוא מצביע עליו.socket יוצר סוקט חדש, ו-connect מתחבר אליו לכתובת שהתקבלה. מתחברים לכתובת הראשונה שהוחזרה.send שולח את הבאפר. אחריו shutdown סוגר את צד השליחה, ולולאת recv קוראת תשובות לבאפר עד סוף החיבור.closesocket סוגר את הסוקט, freeaddrinfo משחרר את רשימת הכתובות, ו-WSACleanup מסיים את השימוש ב-Winsock.getaddrinfo: סוג הסוקט הוא stream, הפרוטוקול TCP, והמשפחה לא מוגדרת, כך שאפשר לקבל כתובת IPv4 או IPv6.INVALID_SOCKET הוא ערך הסוקט הלא תקין. הוא מינוס 1 במשתנה לא מסומן (כל הביטים דלוקים), ולכן משווים אליו ולא לאפס.finally. הניקוי נעשה בבלוק catch, או בפונקציית ניקוי שנקראת בכל מסלול ובודקת לפני שחרור אם המשאב כבר שוחרר.socket משאיר את המשתנה לא תקין, ולכן כל ערך שמוחזר נבדק לפני ההמשך.הטקסט המלא של הדקות הראשונות בהרצאה «צד לקוח» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
עכשיו אנחנו רוצים להתעסק עם תקשורת בואו נפתח visual studio נחכה לו שהוא יעלה לוקח לנו קצת זמן יופי בואו נסגור את זה זה סתם תופס משאב ו-file new project ואנחנו לא ב-c-sharp אנחנו ב-other languages זה c++ ב-win32 קונסול אפליקיישן זה יהיה תקשורת זה יהיה תקשורת זה נטוורקינג 01 ונגיד לו אוקיי חזרה לשולחן
העבודה מצויין אז מגיעים לפה אפליקיישן סטיינס קונסול אפליקיישן פרי קומפיין מצויין אז אפילו אמפטי תמיד עדיף אמפטי נכון יפה בוא נגיד לא אמפטי ובלי פרי קומפיין נקי, נקי, טהור, פיניש, למה זה, למה ללכלך, יפה, זה נקי, אין פה כלום, תואר, סכבא ימני, אדד, ניו אייטם, קליק, ווינדאוס פורם,
מה ווינדאוס פורם? רגע, רגע, רגע, זה סיפר, אה, זה ווינדאוס, אוקיי, בסדר, אבל למה ווינדאוס, ממתי זה? איזה מוזר, תמיד זה ככה?
לא זוכר לי דבר כזה, שאנחנו אף פעם לא מסתכלים, לא מסתכלים. טוב, אז שם הקובץ יהיה כמובן main.cpp ונגיד לו add יפה קובץ ריק ובואו נגיד לו void main פתח סגור פתח סגור בר ימני וקומפייל קובץ של c++ ניתן לקמפל יפה build succeeded אבל זה רק מקומפל בואו נגיד
לו עכשיו build ואז הוא יעשה גם את הקישור בואו נראה את הoutput ואם נראה את ה-output, succeeded, מצוין, יוחא, אנחנו בכיוון.
טוב, אז תקשורת. אנחנו רוצים לתקשר בין שתי אפליקציות, אז אנחנו צריכים או שתי אפליקציות או שני דברים כדי לתקשר ביניהם.
אבל טוב, השאלה היא איך בכלל מתקשרים. Client Server, כן. כן, שני קונספטים, אבל צריך צריך תשתית איך אנחנו מתקשרים. אז כדי לתקשר יש דבר שנקרא Socket.
בוא נראה אם אני אגיד לו סוקט קונטרול רווח הוא לא מכיר את הסוקט אז זהו לדעתי יש לו בוא נעשה F1 בוא נעשה קליק על זה ו-F1 יש שתי דרכים לתקשר יש תקשורת בעזרת פרוטוקול TCPIP ויש תקשורת בעזרת ווינסוק בואו נבין את ההבדל בואו נבין רגע קצת היסטוריה בברקלי באוניברסיטת ברקלי
שבקליפורניה לפני כבר בטח איזה 30 שנה היה צורך ששתי האפליקציות ידברו אחת עם השנייה ואז המציאו פרוטוקול, המציאו סדרה של פונקציות וקראו לזה פרוטוקול ברקלי הפרוטוקול שבעזרתו שתי האפליקציות מתקשרות יותר מאוחר הבינו שבעזרת אותו פרוטוקול ניתן גם לגרום לשני מחשבים לשתי האפליקציות לשני מחשבים לתקשר
אפילו שהם בשני מקומות שונים בעולם בהזדמנות גם שינו את השם שלו מפרוטוקול ברקלי לפרוטוקול tcp-ap. Transmission Control פרוטוקול ואינטרנט פרוטוקול.
יפה. אז יש סדרה של פונקציות שהן כולן עם אותיות קטנות ואנחנו גם נלמד לעבוד בשיטה הזו, אני מקווה. ויש את הפונקציות של התקשורת של Windows שהפונקציות של הפרוטוקול של ברקלי הן מעטפות בסופו של דבר סביב הפונקציות של מייקרוסופט מייקרוסופט באמת ווינדאוס באמת
מתקשרות עם הכרטיס תקשורת ואילו ברקלי מתקשר עם מייקרוסופט אז יש שכבות שכבה עליונה זה פרוטוקול ברקלי ברקלי הוא פרוטוקול מאוד נוח והשכבה התחתונה זה פרוטוקול של ווינדאוס זה נקרא ווין פרוטוקול לא פרוטוקול על הווינסוק אפי איי ווינסוק אפי איי יש גם dll שנקרא ווינסוק אפי איי תכף נראה בדיוק
אני בעצמי כבר לא זוכר ולברקלי יש כל מיני דברים אחרים בואו קצת נחקור את הנושא הזה אז רשמתי את המילה סוקט ועל זה כן רשמתי דבר ראשון רשמתי סוקט ועשיתי f1 והגענו לפה מה זה המילה הזו סוקט פירושה שתקר פירושה פלאג פירושה הכניסה בקיר שאליה אנחנו מחברים את הכבל ושקע, כן, סוקט זה שקע, מצוין, סוקט זה שקע, אז זהו, עכשיו פה הם אומרים שסוקט זה פונקציה.
אוקיי, נראה לי שזה, אם זה באותיות קטנות, אז זה, יש גם את הגדולות, תכף נראה, אבל זה אותיות קטנות, אז זה כנראה פרוטוקול ברקלי, בואו נגלול, בואו נעשה סינק, ויש פה את סוקט, בואו נגלול קצת למעלה, ווינד סוק פונקשן, אבל נראה שהם ערבבו בין הקטנות לגדולות.
קטנה זה של פרוטוקול ברקלי, גדולה זה של Windows, ולמעשה אקספט מפעילה את אקספט אקסטנדד. ביינד של ברקלי, קלוז סוקט של ברקלי, קונקט של ברקלי, קונקט של מייקרוסופט.
אפשר גם לראות שקונקט אקסטנדד היא פסקל, שזה אומר שהיא לא סיק, היא סטנדרט, היא כף תחתון std call, זה משחק כמו סטנדרט call, לעומת c declare זה אומר שזה windows api והקטנה היא לא היא פונקציה רגילה של windows יפה לא של windows אלא אז זהו הקטנים אפשר להגיד שהם ממש חלק מאנטי c אפשר להגיד שהם חלק מהספריות של שפת
c שגם מה ההבדל בסופו של דבר בין ברקלי לבין כן מה ההבדל בין ברקלי לבין ווינסוק אפיה ההבדל הוא שברקלין הוא ממש בכל פלטפורמה יש פרוטוקול ברקלין גם בוניקס ולינוקס ובמאקינטוש לעומת ווינסוק זה רק בפלטפורמות מייקרוסופט אז יש את זה באקספי וויסטה במובייל אבל רק במייקרוסופט זה ייחודי למייקרוסופט
וזה כללי בואו נכתוב את זה, זה יותר בכיוון ה-NCC, זה זמין בעוד פלטפורמות, נקרא נגיד שזה קרוס ומולטי, מה זאת אומרת? ומולטי פלטפורמה, הרבה פלטפורמות, לעומת ווינסלוג שזה מייקרוסופט, נקרא פרו-ריאטרי, ייחודי, זה של, זה שהיה אחלה, זה לא זמין על שום פלטפורמה אחרת. יפה.
אז בואו נתחיל אולי דווקא עם ברקלי. נתחיל עם, אתם רוצים על ברקלי או מייקרוסופט? תנו לי רגע לחשוב על זה, כי זה כיוון שצריך לחשוב עליו לפני.
טוב, אז אנחנו דווקא החלטנו ללכת בכיוון של מייקרוסופט, כי זה יותר אמיתי, זה יותר עמוק, זה לא מעטפת, זו מעטפת על איזושהי פונקציה אחרת עם הוציאות גדולות פה.
אז בואו אנחנו נתחיל לעבוד עם העובדות הגדולות יפה אז אם אני רוצה ליצור מערכת תקשורת אז לגשת ישירות לפונקציות זה לא רעיון טוב מה שאני צריך זה לגשת זה הרפרנס הרפרנס זה לא רעיון טוב מה שאני רוצה זה ללכת יותר גבוה לכאן ולא צריך לקרוא הכל אבל זה יכול להיות נחמד לקרוא about פה הם יסבירו לי על אז ב-using בואו ניתנו לי דוגמאות איך בונים
אז בואו נראה איך בונים about, למרות שלא אמור להיות פה יותר מדי בכלל מלל ופה יש קוד, בואו תבינו איך ה-MSDN בנוי ה-MSDN, כל נושא שלו תיקחו בדרך כלל יהיה לו about, using ו-reference ה-reference זה רשימה של פונקציו ורשימה של סטרקטים ורשימה של מקרואים הם רשימות של דברים, של דברים שקשורים לקוד, ישירות לקוד.
לעומת ה-about שזה רק תמליל וכמעט, הנה זה ציורים, כמעט ולא תמצאו בזה קוד, הם ממש נמנעים פה מלהראות קוד. לעומת ה-using שהם נמנעים מלדבר, הם רק רוצים להראות קוד ולהסביר אותו.
אבל מה כן? זה רק קטעי קוד. זה קטע קוד יוצא דופן כי הוא התקמפל. בדרך כלל זה קוד שלא מתקמפל, פשוט קטע קוד שלא מתקמפל, אבל אם תחברו את כל קטעי הקוד שהם מראים יחדיו תקבלו דוגמא אחת עובדת או כמעט עובדת.
יפה. אז השאלה היחידה היא האם בדוגמאות האלה, אני כבר רואה, אני לא צריך להגיד האם, אני כבר רואה שבדוגמאות האלה הם הולכים לעבוד עם ברקלי.
אז יכול להיות שגם אנחנו נצטרך לעבוד עם ברקלי, יכול להיות שלא נוכל אחרת, כי לא נמצא דוגמא אחרת. בכל מקרה בואו נראה.
דבר ראשון, אומרים שצריך את האינקלודים, ווינטסוק 2, אז במייקרוסופט החליטו שכשיש גרסאות, אז המקורי זה ווין זה משהו, והגרסה הבאה היא עם 2 בסוף, ו-3, ו-4, ו-5.
אז ווינטסוק 2 זו הגרסה הפרווילנטית, זו הגרסה השכיחה. גרסה 2 של ווינטסוק, אני לא מכיר מישהו, אף פעם לא עבדתי עם גרסה אחרת, אני כבר 10 שנים, או כבר 15 שנה בונה מערכות תקשורת.
ווינטסוק 2, tcpap, זה לא השתמשתי בו, וזה ה-STGIO, זה ה-Input Output פה, אנחנו מדפיסים למסך וכל מיני כאלה. יפה, בקיצור, זה מה שאנחנו צריכים בשביל התקשורת.
בואו נראה אם הם אומרים פה עוד משהו מעניין. או, אז הם ממליצים להשתמש ב-Win32 Lean and Mean, כדי לגרום מה? ב-Included by the window the header.
בקיצור, הם אומרים כדי להימנע מ-Winsock 2 להיות מוסף באופן אוטומטי. רוצים להימנע מ-windows.h כי אנחנו עובדים ב-windows 2.h וזה סתם יהיה בזבוז כל קומפילציה תיקח יותר זמן.
בואו נראה מה זה בדיוק the Windows 2.h header file in turn will include core elements from Windows.h header file. So there is not usually an included line for the Windows.h header file in Windows applications.
כלומר שבדרך כלל Windows applications לא צריכים את Windows.h כי כבר יש אותו. If an included line is needed for the Windows.h header file, this should be preceded with the defined 32-linear min macro.
For historical reasons, the Windows.h header defaults to including the Windows.h header file. For Windows.soc התכנון האחד, the declarations in this Windows.h header file will conflict.
ניצור קונפליקטים, אני ממש לא אתקמפל וזה דקלריישן בווינסוק שתיים ואת הפיילינג קוויינסוק ווינדוס סוקש שתיים. בקיצור זה נראה כאילו הוא רק יעשה איזושהי אופטימיזציה לפי השם לין אנד מין, לין פירושו רזה ומין פירושו אכזרי.
זה מונח קרבי כזה לין אנד מין זה מישהו שהוא רזה וקרבי שהוא כולו שרירים אז זה נשמע כמו איזה ביטוי של יתרון זה יותר מאשר הכרחי אבל לפי מה שמסבירים פה זה יתרון קונפליקטים אבל זה קונפליקטים לא נשמע כמו יתרון אלא כמו הכרחי תכף נראה אם באמת זה הכרחי או יתרון המאקרו הזה בכל מקרה אם הם כותבים בו if not def אז define זה ואז end if למה עושים את זה כי יכול להיות שזה כבר
הוגדר לפני כן אבל לא צריך להגדיר את זה שוב אם נגדיר את זה שוב נקבל warning or error שזה redefinition או משהו כזה בקיצור הרבה פעמים נהוג לשים אם זה לא עוגדף not def אז תגדיר את זה וסוף האיף יפה אוקיי אז next step initializing זה מה זה IP help API ווינסוק 2 tcp/ap לא רואה למה מה הם אבל בסדר initializing זה ווינסוק אז יש לנו מבנה ווינסוק
אסינקריניס דאטה כנראה ווינסוק אסינקריניס סטארט-אפ אה זה טוב מאוד זה לא ברקלי אז זה יפה אז קוראים כל דה ווינסוק איי סינקרנס אני מאמין שאיי זה איי סינקרנס all porting applications or dll that call winsock functions must initialize the use of the windows socket dll before making other winsock functions call this also
makes certain that winsock is supported