26-09-2010, 03:53
|
|
|
חבר מתאריך: 22.08.08
הודעות: 310
|
|
בעיות לא ברורות בnetworking
הכנתי לעצמי סרבר מאוד בסיסי של HTTP לפני הרבה מאוד זמן בעזרת WinSock.
הוא עשה לי אז ים בעיות של התחברות - לפעמים פעל, לפעמים לא. לפעמים הראה תמונות כמו שצריך, לפעמים לא.
בסוף העברתי את הפונקציות שלי לשליחת קבצים (מעבר לטקסט פשוט) לפונקצייה TransmitFile של Windows וזה פעל יחסית בסדר (עדיין היו בעיות פה ושם).
עכשיו אני מנסה להכין מחדש סרבר קטן בעזרת SDL, ואני רוצה אותו portable ככה שTransmitFile לא בא בחשבון.
הקוד שלי פועל 100%, או לפחות ככה הוא טוען. מבחינת הsockets שלי, כל המידע נשלח פיקס, הכל פועל מצוין.
באופן ריאליסטי, אני בעצמי אפילו לא מקבל את התמונות והקבצים שהתוכנית טוענת שהיא שולחת, וגם אנשים אחרים לא. פתאום בא מישהו ואמר שדווקא לו התמונות פועלות מצוין, אבל כשהוא מנסה להוריד משהו זה מוריד על 20 בתים לשנייה (כאשר התוכנית טוענת שה20 קילו בייתים המסכנים נשלחו מיד, כמובן).
מה לעזאזל הסיפור כאן?
ולמה עם כל שורה מסכנה שאני מוסיף מתווצרות עוד 20 בעיות?
אני מניח שאף אחד לא רוצה להסתכל על קוד ארוך ולא מסודר, אז הנה פונקציית השליחה של קבצים בינאריים במקום (לא משהו מסובך במיוחד...)
קוד PHP:
int Socket::send (void* data, const int bytes) { int sent = SDLNet_TCP_Send(s, data, bytes);
while (sent < bytes) { sent += SDLNet_TCP_Send(s, data + sent, bytes - sent); }
return sent; }
עריכה: והנה מה שאני שולח לקבצים בינאריים
קוד PHP:
HTTP/1.1 200 OK Connection: keep-alive Content-type: application/octet-stream Accept-Ranges: bytes Content-Length: X
Content...
את
image/jpg
כבר ניסיתי, הוא מלכתחילה לא פעל אף פעם.
נערך לאחרונה ע"י Dragonion בתאריך 26-09-2010 בשעה 03:56.
|