הרשם שאלות ותשובות רשימת חברים לוח שנה הודעות מהיום

חזור   הוסטס - פורום אחסון האתרים הגדול בישראל > עיצוב גראפי, תכנות על כל שפותיו וקידום ושיווק אתרים > פורום תיכנות

   
|!|

השב
 
כלים לאשכול תצורת הצגה
ישן 22-11-11, 22:04   # 1
daNN
חבר בקהילה
 
daNN's Avatar
 
מיני פרופיל
תאריך הצטרפות: Jan 2011
גיל: 34
הודעות: 178

daNN לא מחובר  

גודל פאקט מירבי בשליחה דרך פרוטוקול UDP

יש לי פרוייקט די גדול בC++ שאני עובד עליו בזמן הפנוי שלי
אחת מהפונקציונליות שלו זה שליחת פאקט בגודל מירבי שלא יגרום לקריסת המערכת
משום מה פאקט בגודל 65500 נשלח ללא בעיה אך כל בייט מעל גורם לקריסת התוכנה
עם הודעת שגיאה abort()

חיפשתי קצת בגוגל על גודל מאקסימלי של פאקט UDP ולא מצאתי תשובה שהבהירה לי
כמה באמת אפשר לשלוח בתור מאקסימום.. מאחר שבחלק צויין גם המספר 65535 (שאצלי גורם לקריסה).
ייתכן ופאקט בגודל 65500 עובד אצלי ואצל מחשב אחר יגרום לקריסה?
אסור לי לתת לזה לקרות אני חייב לדאוג לכל מקרי הקיצון...

הקוד בC++ אם כי לא נראה לי שזה כלכך משנה:
בקישור הבא: (אני תמיד מעדיף לראות את זה עם הhighlights)
http://pastebin.com/LKZseYTV
או כאן:
קוד:
void send_max_udp_packet(std::string host, std::string port)
{
	// C++ Boost declarations of Sockets
	boost::asio::io_service io_service;

	udp::resolver resolver(io_service);
    udp::resolver::query query(udp::v4(), host, port);
	udp::endpoint receiver_endpoint = *resolver.resolve(query);
	udp::socket socket(io_service);
    socket.open(udp::v4());

	// Filling array with 65500 bytes (65530+ making my program crash for some reason)
	boost::array<char, 65500> send_buf  = { 'X' };

	// Sending throught UDP the packet
    socket.send_to(boost::asio::buffer(send_buf), receiver_endpoint);
}

Last edited by daNN; 22-11-11 at 22:06..
  Reply With Quote
ישן 23-11-11, 11:35   # 2
daNN
חבר בקהילה
 
daNN's Avatar
 
מיני פרופיל
תאריך הצטרפות: Jan 2011
גיל: 34
הודעות: 178

daNN לא מחובר  

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

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

השאלה שלי השתנתה מה שאני רוצה לדעת עכשיו זה האם גודל פאקט UDP משתנה ממחשב למחשב? ואם כן האם יש דרך למדוד את הגודל המירבי של הפאקט?
  Reply With Quote
ישן 23-11-11, 14:45   # 3
איציק ברבי
עסק רשום [?]
 
מיני פרופיל
תאריך הצטרפות: Feb 2011
הודעות: 970

איציק ברבי לא מחובר  

אין אפשרות לעבור את הטווח הזה 0-65500.
תמצא דרך אחרת, זה לא בעיה אצלך.
__________________

איציק ברבי - שירות לקוחות
כתובת אתר: http://build-net.co.il/
איימל: Support@build-net.co.il
טלפון: 052-3937296.
  Reply With Quote
ישן 23-11-11, 17:51   # 4
daNN
חבר בקהילה
 
daNN's Avatar
 
מיני פרופיל
תאריך הצטרפות: Jan 2011
גיל: 34
הודעות: 178

daNN לא מחובר  

חשבתי גם כמוך אבל אם ככה למה בPHP אני מצליח לשלוח פאקט UDP בגודל 65535 ?
פונקציה שכתבתי ב PHP ששולחת פאקט בגודל 65535
קוד:
for($i=0;$i<65535;$i++){
        $out .= "X";
}
  $fp = fsockopen("udp://$ip", $rand, $errno, $errstr, 5);
        if($fp){
                fwrite($fp, $out);
                fclose($fp);
        }
  Reply With Quote
ישן 23-11-11, 22:24   # 5
בניה
משתמש - היכל התהילה
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
מיקום: נחושה
הודעות: 3,434

בניה לא מחובר  

על איזו מערכת הפעלה מדובר ובאיזה קומפיילר+סביבת עבודה אתה מפתח?

*65536 זה הגודל המקסימאלי של מספר שלם בגודל 2 בייטים זה צריך להיות קשור לזה.
  Reply With Quote
ישן 24-11-11, 00:29   # 6
daNN
חבר בקהילה
 
daNN's Avatar
 
מיני פרופיל
תאריך הצטרפות: Jan 2011
גיל: 34
הודעות: 178

daNN לא מחובר  

כן הדבר המוזר זה שמעל 65500 זה כבר זורק Exceptions
אני מפתח בסביבת עבודה של מיקרוסופט MVC++ 2010
ומשתמש ב Windows 7

Last edited by daNN; 24-11-11 at 01:57..
  Reply With Quote
ישן 24-11-11, 10:57   # 7
בניה
משתמש - היכל התהילה
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
מיקום: נחושה
הודעות: 3,434

בניה לא מחובר  

http://en.wikipedia.org/wiki/User_Da...cket_structure
אתה צריך לחלק את המידע שלך ל CHUNKS ולשלוח כל CHUNK בנפרד, בPHP כנראה הוא מטפל בזה
  Reply With Quote
השב

חברים פעילים הצופים באשכול זה: 1 (0 חברים ו- 1 אורחים)
 


חוקי פירסום
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is מופעל
סמיילים הם מופעל
[IMG] קוד מופעל
קוד HTML מכובה

קפיצה לפורום


כל הזמנים הם GMT +2. הזמן כעת הוא 02:20.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ