בעיה בSocket,

זויברג

New member
בעיה בSocket,

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

זויברג

New member
אני לא יודע אם זה משפיע,

אני עושה recieve בלולאה, ובודק את הערך שהפונקציה אם הוא לא שווה לSOCKET_ERROR או 0, לקחתי את הרעיון מהאתר של MSDN באחת הדוגמאות שלהם. בכל מקרה תודה רבה.
 

DNile

New member
הבעיה היא כזאת:

TCP מבטיח לך לנהל stream - רצף של מידע, שבו אם שלחת "abcdefghijklmnopqrstuvwxyz", אתה גם תקבל את זה בצד השני. אין לך שום הבטחה לגבי איך הרצף הזה יהיה מחולק. משיקולים תעבורתיים שונים, שלפעמים תלויים בך, ולפעמים לא, מאוד יכול להיות שאיפה שהוא לאורך הדרך יהיה צירוף של הודעות אחת לשניה, או יותר גרוע - הפרדה של הודעה אחת לכמה חלקים(מה שנקרא פרגמנטציה). מה עושים? מגדירים פרוטוקול קצת יותר "מורכב", אבל נורא נורא בסיסי, שבו אתה מחלק את הstream שלך לפאקטות. איך עושים את זה? בצד השולח: א. שלח את הגודל של ההודעה - כשהגודל הודעה הוא בגודל ידוע(4 בתים למשל). ב. שלח את ההודעה. בצד המקבל: א. קבל 4 בתים של גודל הודעה. נסמן את הגודל בX. ב. רוץ בלולאה, ובקש מהסוקט X בתים. ג. אם קיבלת בדיוק X בתים, אתה מסודר, וזאת הפקטה שלך. אם לא, החסר מX את מספר הבתים שקיבלת, וקפוץ לב'. בהצלחה!
 
למעלה