עבור לתוכן

עזרה בתכנות לסוקטים

Featured Replies

פורסם

אני מנסה לכתוב תוכנת לקוח המדברת עם שרת באמצעות socket. הנה הקוד של תחילת התוכנית:

#include <stdio.h>

#include <winsock.h>

int main()

{

int sockfd;

WSAData wsaData;

printf("starting WSA...");

if (WSAStartup(MAKEWORD(1,1),&wsaData) != 0) {

printf("failed.\n");

exit(1);

}

printf("Done!\n");

printf("Creating Socket...");

if ( sockfd = socket(AF_INET,SOCK_STREAM,0) == INVALID_SOCKET ){

printf("failed.\n");

exit(1);

}

printf("Done!\n");

}

הבעיה היא שהמשתנה sockfd מקבל תמיד 0 אחרי שאני מפעיל את הפונקציה socket.

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

יש למישהו רעיונות?

פורסם

ניסית להגדיר את SOCKET עם ה"קדם מעבד" (סליחה אם אני טועה בשם, לא עברתי על זה די הרבה זמן)?

פורסם
  • מחבר

אתה מתכוון לפונקציה socket? כי אם כן היא מוגדרת בwinsock.h ואני לא צריך להתעסק איתה חוץ מלשלוח אליה את הפרמטרים (הנכונים) האלה.

פורסם

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

תגדיר לו את הערך שמתאים לך

פורסם
  • מחבר

א. משתנים בC לא מקבלים שום ערך כשמגדירים אותם :kopfpatsch:. כלומר הם מקבלים ערך רנדומלי, שהיה כבר מקודם בתאי הזיכרון שהוקצו בשבילם

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

פורסם

if ( (sockfd = socket(AF_INET,SOCK_STREAM,0)) == INVALID_SOCKET ){

}

פורסם
  • מחבר

דיי, אל תגיד לי שאני כזה טיפש... :bash: אני עכשיו הולך לנסות את זה :'(

איך יכול להיות שאין קדימות ל= לפני ה==? :-(

פורסם

גם אם זה היה נכון של= היתה קדימות על == (וטוב שלא אחרת קוד הרבה יותר נפוץ וחשוב לא היה פועל) מגיעות לך מכות על שהסתמכת על קדימיות בקוד שהוא גם ככה מלא רעש ויזואלי. זה בסדר בביטויים פשוטים כמו X == I + 2 אבל במקרה שלנו יש לא מעט סוגריים, פסיקים ופרמטרים. עובדה - טעית.

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

פורסם
  • מחבר

טוב... תודה

פורסם

הכל כמובן בצחוק. אני כמעט אף פעם לא מרביץ לאנשים בגלל קוד (והנשיכה היתה מקרה חד פעמי!!).

פורסם
  • מחבר

דווקא מגיעות לי מכות. אתה כל כך צודק.

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

אבל למה התכוונת מבחינת הרעש הויזואלי? שאני קורא לפונקציה ועושה השמה של ערך ההחזרה שלה בתוך if?

פורסם

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

לכן עדיף לבצע את ההשמה בשורה נפרדת, ואת התנאי בהמשך.

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

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים