בעייה עםWINSOCK

ilankt

New member
בעייה עםWINSOCK

ניסיתי לעשות non-blocking server עם הפונקציה select. עשיתי מחלקה לserver ומחלקה לclient. עכשיו הבעיה היא כנראה בפונקציה שבודקת אם יש הודעות חדשות, היא כל הזמן אומרת שיש לי הודעות חדשות, כשאין לי... אני ישים פה את כל הפרוייקט, כדי שתוכלו לעזור לי... בתודה מראש! TXT=ZIP
 

Pembelton

New member
כדאי שתספק פרטים מלאים על מה שקרה

בכל אופן. שלוש שתי הערות: א. כאשר אתה בודק את ה- input_set אתה ישר מחזיר TRUE. כלומר אתה לא אוסף את המידע שיש ב SOCKET ולכן גם בפעם הבאה שתגיע ל SELECT אתה תקבל "התראה" שיש הודעה חדשה. כלומר => כל עוד לא ניקית הודעה נכנסת תמשיך לקבל התראות. ב. הרבה יותר נוח לתכנת SERVER כמו שלך אם משתמשים ב THREADS במקום ב SELECT. ואז כל THREAD מתעסק עם SOCKET אחד בלבד והוא יכול להחסם על ה- SOCKET שלו מבלי לחשוש שהוא תוקע את האפליקציה כולה. ג. יש הרבה דוגמאות באינטרנט. תמצא אחת שקרובה לצרכיך ותשנה את מה שצריך (אם צריך) . למשל, נסה את: http://www.lowtek.com/sockets/
 

ilankt

New member
שלוש שתי הערות? ../images/Emo13.gif

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

Pembelton

New member
הבעיה היא ב SEND

השורה שלך: send(ClientSocket,Data,sizeof(Data),0); כאשר Data הוא const char* אם תסתכל על הביטוי sizeof(Data); אז תבין שהערך שלו הוא תמיד 4 שזה גודל של פוינטר מה שאתה צריך זה strlen(Data) אני חוזר וממליץ לחפש דוגמאות. כי יש עוד כמה בעיות בתכנית שלך שיתעוררו אם תרצה לשלוח מחרוזות ארוכות (כי אז הן תפוצלנה למספר תת-מחרוזות שתגענה ל SERVER אחת אחרי השניה בתור הודעות נפרדות)
 
למעלה