ABA


"ב-winsock : אני מקבל לפעמים לא את כל המידע"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #6121 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 6121
adiadi

   09:13   02.06.03   
אל הפורום  
  ב-winsock : אני מקבל לפעמים לא את כל המידע  
 
   נגיד שאני שולח מידע של איזה קובץ או משהו כזה מפורט אחד לשני. אם זה בתקשורת סבירה (נגיד בין שני מחשבים מחוברים ישירות) אז זה בסדר. אבל אם זה תקשורת באינטרנט - אז לפעמים אני מקבל את המידע לא שלם. למשל:

אני שולח :
hello world how are you today

ולפעמים מקבל : orld how are y

ההתחלה ו/או הסוף לא שלמים. עכשיו - מכיוון שזה tcp/ip אז זה לא אמור לקרות אבל זה קורה. האם יש איזה הגדרה של הוינסוק שאני מפספס ?

תודה!


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  האיזו שפה אתה מתכנת? Ken 02.06.03 15:45 1
  יכול להיות שאתה מקבל את ההודע בחלקים AndreyT 02.06.03 16:00 2
     אז זהו, שאני משתמש במעין פרוטוקול adiadi 02.06.03 17:33 3
  תנסה את זה carmi_s  02.06.03 21:03 4
     אז מה עשיתי ? adiadi 03.06.03 10:05 5
         לא נראה לי שיש פיתרון בהגדרה של וינסוק AndreyT 03.06.03 11:02 6
             טוב adiadi 03.06.03 12:40 7
                 ADSL אתה אומר , אז זה באמת מוזר... AndreyT 03.06.03 13:03 8
                     אנשים אתם מצחיקים Quant86 03.06.03 15:21 9
                         לחלוקה יש קשר והיא החלוקה הבסיסית Vidi 03.06.03 16:35 10
                             לא, לא. אחים שלי - לא הבנתם adiadi 03.06.03 17:25 11
                                 בטח לכל מידע שאתה מעביר הוספת Header נכון? Vidi 03.06.03 17:30 12
                                 לפי מה שאני יודע Quant86 03.06.03 17:33 13
                                 זו אכן תופעה ולא בעיה AndreyT 05.06.03 11:14 15
  טוב. תודה לכל העוזרים! adiadi 03.06.03 19:32 14
     תיצור מעין Headers shsh1 07.06.03 00:16 16
         זה מה שעשיתי.. adiadi 07.06.03 01:34 17
  יש לי שאלה: Ken 17.06.03 21:02 18
     אתה לא טועה adiadi 19.06.03 12:41 19
         אהה Ken 19.06.03 17:20 20

       
Ken

   15:45   02.06.03   
אל הפורום  
  1. האיזו שפה אתה מתכנת?  
בתגובה להודעה מספר 0
 
   אם זה VB לא אמורה להיות בעיה...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
AndreyT

   16:00   02.06.03   
אל הפורום  
  2. יכול להיות שאתה מקבל את ההודע בחלקים  
בתגובה להודעה מספר 0
 
   כשאני עשיתי ניסויים על וינסוק שמתי לב
שאם שולכים הודעה גדולה הוא מפרק אותה לחלקים(Sockets)
כל חלק נשלח בנפרד ואפשר לחבר אותם חזרה
ברגע שמקבלים מהצד השני.
תבדות טוב אולי ההודעה שלך התפרקה לשלוש חלקים :
hello w
orld how are y
ou today

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


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
adiadi

   17:33   02.06.03   
אל הפורום  
  3. אז זהו, שאני משתמש במעין פרוטוקול  
בתגובה להודעה מספר 2
 
   משלי לעניין. אני תוחם את המידע, אבל חשבתי שאולי זה לא בסדר, ויש דרך לתקן זאת ע"י הגדרה כלשהי. בכל מקרה - תודה!


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
carmi_s 
חבר מתאריך 1.6.03
1003 הודעות
   21:03   02.06.03   
אל הפורום  
  4. תנסה את זה  
בתגובה להודעה מספר 0
 
   מראש תחלק את המשפט לפי הרווחים כלומר מילים נפרדות ןתשלח אחד אחד זה לאט יותר אבל חלוקה ל THREADS תתן לך לחלק את זמן העבודה לפעם פרוק למילים ופעם לשליחת מילים


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
adiadi

   10:05   03.06.03   
אל הפורום  
  5. אז מה עשיתי ?  
בתגובה להודעה מספר 4
 
   אני למעשה לא שולח מילים, אלא מידע גדול מאוד. אם אני מחלק, ןשולח אחד אחד, אז לא ניצלתי את רוחב הפס. וגם רעיון חלוקת הזמן בין פירוק לשליחה לא טוב לי כי אני צריך ביצועים.

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


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
AndreyT

   11:02   03.06.03   
אל הפורום  
  6. לא נראה לי שיש פיתרון בהגדרה של וינסוק  
בתגובה להודעה מספר 5
 
   וינסוק חייב לפרק את הטקסט לחבילות,
זה בעצם דרך העבודה שלו.
זה אפילו מוטמן בשם שלו , "וינסוק" בעברית זה "וין-חבילחה".

אגב איזה אינטרנט יש לך ? רגיל או ADSL ?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
adiadi

   12:40   03.06.03   
אל הפורום  
  7. טוב  
בתגובה להודעה מספר 6
 
   אם אין ברירה אז אין ברירה..

יש לי ADSL, ולמעשה כתבתי תוכנת שיתוף שתהיה מיועדת לחברי הפורום בלבד. זה כבר עובד (ונוסה ע"י 20 משתמשים בפורום). היו בעיות ופתרתי את כולן. הקטע הוא שעשיתי הורדה במקביל של אותו קובץ מכמה משתמשים, וכשעושים את זה אז התופעה שציינתי מתרחשת. פתרתי אותה ע"י delimiters אב זה מאיט את קצב ההורדה (לא משמעותית אבל חבל..).

טוב, אז תודה רבבבבה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
AndreyT

   13:03   03.06.03   
אל הפורום  
  8. ADSL אתה אומר , אז זה באמת מוזר...  
בתגובה להודעה מספר 7
 
   אצלי יש גם ADSL וגודל החבילות אצלי נע
בין 10,000 ל 50,000 בתים.

אגב , מתי אתה מסיים את התוככנה ?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Quant86

   15:21   03.06.03   
אל הפורום  
  9. אנשים אתם מצחיקים  
בתגובה להודעה מספר 8
 
   עבר עריכה לאחרונה בתאריך 03.06.03 בשעה 15:24
 
SOCKETS זה חלוקה לתת מקטעים?!
התכוונתם חלוקה לPACKETS ואין קשר בכלל, המידע אכן נשלח בקטעים, והפתרון הכי פשוט לבעיה, הוא לחבר את כל מה שנתקבל מהSOCKET ורק אז להציג אותו, כמו שכשאתה מוריד קובץ, אתה לא בודק אותו תוך כדי....

אהההה וד"א, אין קשר בכלל לTCP/IP, אבל אני מבין למה אתם מתכוונים, אתה מתכוון בכלל ל UDP ששם כן יכולות לקרות התקלות, אבל גם UDP אמור להיות חלק מהפרוטוקול הענק שנקרא TCP/IP, שבעצם מה שאתה לא רואה מאחורי הקלעים היא החלוקה לפאקטים, ומתן כתובות IP והקבלה של ההודעות דרכם....

UDP SOCKET אכן אמורה להיות יותר מהירה, אולם אין לסמוך עליה, באמת קורה שחלק מהמידע לא מגיע, ולכן נהוג לבדוק אותו תמיד בעזרת CRC CHECK או אחת השיטות הדומות... ב TCP SOCKET, זה אכן לא קורה, וניתן לסמוך על המידע שהוא הגיע.....

מה שמעניין אותי, זה איך בקצב הזה שיש לך בעיות ברמה בסיסית של WINSOCK, אתה מצליח להוריד קובץ, ועוד לחלק אותו להורדה בו זמנית מכמה אנשים, לכמה KBPS כבר הגעת עם זה?

דבר איתי באי סי קיו אם אתה רוצה עזרה... 107422871


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Vidi
חבר מתאריך 1.10.17
591 הודעות
   16:35   03.06.03   
אל הפורום  
  10. לחלוקה יש קשר והיא החלוקה הבסיסית  
בתגובה להודעה מספר 9
 
שכל מחשב שמעביר מידע ב IPv4 (ידוע כיום כפרוטוקול ה IP)
מחלק כל פאקט ל 572 בתים (Bytes) אז לא משנה אם אתה יכול לשלוח 1 MB של מידע בשנייה הוא יחלק את זה לחבילות של 572 בתים.
מכיוון שזה ברמת הפרוטוקולים של המחשב ו VB אינה מאפשרת רמה תיכנותית כזאת (לפי מיטב הבנתי) זו אינה בעיה שאתה אמור לדאוג בקשר אליה!
אם זו בעייתך ידוע לי על בעיות קריאת קבצים בינארים וכתיבתם על כונן המפורמט בשיטת NTFS נתקלתי בבעיות אלו ב C++ וב VB ":|


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
adiadi

   17:25   03.06.03   
אל הפורום  
  11. לא, לא. אחים שלי - לא הבנתם  
בתגובה להודעה מספר 10
 
   אני לא מדבר על החלוקב ל-packets. אני מדבר על תופעה כזו :

1. אני שולח בוינסוק מידע ל-buffer שלו בגודל של למשל 15KB. אני מקבל אותו בכמה פעמים (למשל שלוש פעמים). אז אם נגיד שהמידע התחיל באות A וניגמר באות Z ושלחתי משהו כמו : ABCDEFGZ אז קיבלתי בשלוש "נאגלות" :

פעם ראשונה : ABC
פעם שניה : DEF
ופעם שלישית : GZ

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


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Vidi
חבר מתאריך 1.10.17
591 הודעות
   17:30   03.06.03   
אל הפורום  
  12. בטח לכל מידע שאתה מעביר הוספת Header נכון?  
בתגובה להודעה מספר 11
 


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Quant86

   17:33   03.06.03   
אל הפורום  
  13. לפי מה שאני יודע  
בתגובה להודעה מספר 11
 
   זו לא בעיה בווינסוק אלא תופעה, שפשוט לומדים להתמודד איתה...
ככה זה אמור להיות...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
AndreyT

   11:14   05.06.03   
אל הפורום  
  15. זו אכן תופעה ולא בעיה  
בתגובה להודעה מספר 11
 
   עבר עריכה לאחרונה בתאריך 05.06.03 בשעה 11:22
 
גם אני נתקלתי תופעה הזות
ולכן פיתחתי פרותוקול תקשורת שמצליח
לחבר את כל ה"נאגלות" להודעה אחת
הפרותוקול גם מעפשר להעביר הודעות ללא סדר
ויכול ליצור כמה FileTransfers שאתה רוצה דרך פורט
אחד.
בינתיים הפרותוקול מיושם אצלי רק על טרוינים,
אשמח אם ימצא לו שימוש טוב יותר.
אם אתה רוצה אני יכול להסביר לך איך הוא עובד,
אולי זה יעזור לך, ICQ : 156183722 .


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
adiadi

   19:32   03.06.03   
אל הפורום  
  14. טוב. תודה לכל העוזרים!  
בתגובה להודעה מספר 0
 
   וריך אמר : Quant86 .. לומדים לחיות עם זה..


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
shsh1

   00:16   07.06.03   
אל הפורום  
  16. תיצור מעין Headers  
בתגובה להודעה מספר 14
 
   לכל ותשלח את זהמידע בחבילות קטנות (לדוגמא 500 בתים)
ובHeader תרשום את החלק ההתחלתי של המידע בקובץ שעכשיו התהליך הורדה..


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
adiadi

   01:34   07.06.03   
אל הפורום  
  17. זה מה שעשיתי..  
בתגובה להודעה מספר 16
 
   אבל זה מה שמוריד את קצב ההורדה. למשל - כאשר אני מוריד קובץ מחמישה משתמשים שכ"א תורם בערך 10KB אז צריך להגיע לבערך 50KB (וזה באמת ככה כשאין בעיות), אבל כשאני מחלק לחבילות של 2KB (שמעל לזה כבר מתחילות הבעיות) עבור כל משתמש, אז הקצב הכללי עומד על בערך 15-20KB (וזה חבל מאוד..).

אין ברירה (אולי אני אמצא איזה פתרון אחר).. תודה לכולם בנתיים!


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Ken

   21:02   17.06.03   
אל הפורום  
  18. יש לי שאלה:  
בתגובה להודעה מספר 0
 
   המהות של פרוטוקול TCP/IP הוא לא אמור להיות שאם אני שולח מידע
אז שהוא לא יקטע לי באמצע?

אני מבולבל עכשיו...כי בUPD אני יודע שאין בדיקה אם כל המידע הגיע וכו'
אבל ב-TCP/IP אמור להיות את זה!

תקנו אותי אם אני טועה?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
adiadi

   12:41   19.06.03   
אל הפורום  
  19. אתה לא טועה  
בתגובה להודעה מספר 18
 
  
הבעיה כאן היא לא בפרוטוקול אלא בוינסוק עצמו. ב-TCPIP המידע ניבדק ונישלח שוב במידה ובעייתי. הקטע בוינסוק הוא ברצף מידע גדול (שאני מניח שכולל בתוכו packets רבים) ואת ה-event של קבלת המידע (וזה לא משנה אם זה ב-VC או VB) הוא מחלק לקטעים (בד"כ ל-buffer בגודל 8KB). אם שלחו 80K מידע אז אני מקבל ה-event כ-10 פעמים במקום פעם אחת כל המידע. זה עיצבן אותי אבל התגברתי על זה תוכנתית (קיויתי שיש הגדרה כלשהי בוינסוק אב כניראה שאין)


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Ken

   17:20   19.06.03   
אל הפורום  
  20. אהה  
בתגובה להודעה מספר 19
 
   הבנתי תודה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net