המדריך של ביג' לתכנות רשת
הקודםהבא

1. מבוא

הי ! תכנות בשקעים תפס אותך מדוכא? זה החומר הזה שקצת קשה להבין לבן מעמודי ההדרכה (man pages)? אתה רוצה לעשות תכנות אינטרנט מגניבי, אבל אין לך זמן כדי לנבור בערימה של מבנים (struct ) בניסיון להבין אם אתה צריך לקרוא ל bind() לפני שקוראים ל connect() ? וכו וכו...

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

1.1. קהל יעד

מסמך זה נכתב כמדריך לא כהתייחסות. הוא כנראה הכי טוב שהוא נקרא ע"י אנשים שמתחילים עם תכנות בשקעים (socket programming) ומחפשים אחיזה. זה לבטח לא המדריך השלם לתכנות בשקעים.

בתקווה , מדריך זה מספיק כדי שעמודי ההדרכה (man pages) האלה יתחילו להיות הגיוניים... :-)

1.2. מערכת הפעלה ומהדר

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

1.3. אתר בית רשמי

המיקום הרשמי של מסמך זה הוא בקליפורניה, אוניברסיטת שיגקו בhttp://www.ecst.csuchico.edu/~beej/guide/net/.

1.4. הערה ל מתכנתי Solaris/SunOS

כאשר מהדרים עבור Solaris או SunOS, עליך לרשום כמו ארגומנטים נוספים בשורת פקודה - כדי לקשר עם הסיפריות המתאימות. כדי לעשות זאת פשוט הוסף "-lnsl -lsocket -lresolv" לשורת הפקודה ככה:


    $ cc -o server server.c -lnsl -lsocket -lresolv

אם אתה עדיין מקבל שגיאות, נסה להוסיף "-lxnet" לסוף שורת הפקודה, אני לא יודע בדויק מה זה עושה , אבל אנשים דיווחו שזה נחוץ

מקום אחר שאולי יהיו לך בעיותת בו זה בקריאה ל setsockopt() חתימת הפונקציה שונה מלינוקס ללינוקס, ולכן במקום


	int yes=1;

רשום את זאת:


	char yes='1';

אין לי מחשב עם Sun , ולא בדקתי את האמור לעיל - זה מה שאנשים אמרו לי דרך אימייל.

1.5. הערה למתכנתי Windows

יש לי אי חיבה עבור Windows, ואני מעודד אותכם לנסות Linux,BSD או Unix במקום אחרי שזה נאמר, אתם עדיין יכולים להשתמש בכתוב כאן בWindows.

דבר ראשון התעלמו מכל קבצי ה Include של המערכת שאני אזכיר, כל מה שאתם צריכים זה


    #include <winsock.h>

חכו! אתם גם צריכים לעשות קריאה ל WSAStartup() לפני שאתם עושים משהו אחר עם שקעים. הקוד נראה בערך ככה:


    #include <winsock.h>

    {
        WSADATA wsaData;   // if this doesn't work
        //WSAData wsaData; // then try this instead

        if (WSAStartup(MAKEWORD(1, 1), &wsaData) != 0) {
            fprintf(stderr, "WSAStartup failed.\n");
            exit(1);
        }

אתם גם צריכים להגיד למהדר לקשר את סיפריית Winsock, שבדרך כלל נקראת wsock32.lib או winsock32.lib אומר משהו כזה. שאתם עובדים עם VC++ ,ה יכול להתבצא דרך תפריט הProject, שם ב Settings.... עברו לטאב Link, וחפשו תיבה בשם "Object/library modules". הוסיפו את "wsock32.lib" לרשימה הזאת.

או שככה אני שומע...

לבסוף, עליכם לקרוא ל WSACleanup() שכבר סיימת את עסקכם בסיפרית השקעים. ראה בעזרה המקוונת לפרטים.

ברגע שעשיתם זאת, הדוגמאות במדריך זה צריכות באופן כללי לעבוד. דבר אחד חשוב , אתם לא יכולים להשתמש ב close() כדי לסגור שקע, במקום זאת זאת השתמשו ב closesocket(). בנוסף הפונקציה select() עובדת רק עם מתארי שקעים, לא עם מתארי קבצים (כמו 0 עבור stdin).

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

די להשיג עוד מידע על Winsock, קרא את Winsock FAQ ותמשיך משם.

לבסוף, אני שומע ש לWindows אין את קריאת המערכתfork() שהיא לרוע המזל נמצאת בכמה מהדוגמאות. אולי אם תקשרו לסיפריית POSIX או משהו כזה תגרמו לדוגמאות לעבוד, או שאתם יכולים להשתמש ב CreateProcess() במקום. fork() לא לוקחת ארגומנטים, ו CreateProcess() לוקחת בערך 48 ביליון ארגומנטים . אם לא בא לכם עליה, הקריאה CreateThread() יותר קלה. אבל דיבור על multithreading הוא מעבר לתחום של מסמך זה, יש לי הגבלה על כמה לדבר, מבינים...

1.6. מדיניות אימייל

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

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

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

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

1.7. אתרי מראה

אתם מוזמנים בהחלט לעשות אתרי מראה לאתר שלי, באם פרטי או ציבורי. אם אתם עושים אתר מראה באופן ציבורי ורוצים קישור אליו מהאתר הראשי , שלחו לי שורה ל <beej@piratehaven.org>.

1.8. הערה למתרגמים

אם אתם רוצים לתרגם את מסמך זה לשפה אחרת , כתבו לי ב <beej@piratehaven.org> ואני אקשר את התרגום שלכם מהעמוד הראשי.

תרגישו חופשיים לצרף שם ואימייל לתרגום.

מצטער אבל עקב מגבלות מקום, אינני יכול לארח את התרגום בעצמי.

1.9. זכויות יוצרים והפצה

Beej's Guide to Network Programming is Copyright ?© 1995-2001 Brian "Beej" Hall.

המדריך של ביג' לתכנות רשת, כל הזכויות שמורות © 1995-2001 בריאן ביג' האל(Brian "Beej" Hall)

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

מרצים מעודדים לספק או להמליץ עותקים של מדריך זה לסטודנטים שלהם.

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

קוד המקור ב C שנכתב כאן, ניתן בזאת לציבור.

לעוד מידע כתוב ל<beej@piratehaven.org>.

This guide may be freely reprinted in any medium provided that its content is not altered, it is presented in its entirety, and this copyright notice remains intact.

Educators are especially encouraged to recommend or supply copies of this guide to their students.

This guide may be freely translated into any language, provided the translation is accurate, and the guide is reprinted in its entirety. The translation may also include the name and contact information for the translator.

The C source code presented in this document is hereby granted to the public domain.

Contact for more information.


הקודםביתהבא
המדריך של ביג' לתכנות רשת מה הוא שקע ?