הסתבכתי קצת עם הבנה של סוקטים - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

הסתבכתי קצת עם הבנה של סוקטים


bdoron

Recommended Posts

קראתי שכל פורט מחובר לסוקט , מה שאני לא מבין זה שהבנתי שיש כמה סוגים של סוקטים, העיקריים בניהם לשימוש בtcp ip זה stream socket ו datagram socket עכשיו, מי בעצם בוחר את השימוש באיזה סוקט?

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

זאת אומרת שתוכנה מסויימת בחרה להשתמש בstream socket שיעבור בפורט 20300 למשל? עד לפה הבנתי נכון? או שפורט 20300 למשל מוקצה לסוקט מסוג מסויים

קצת מבולבל ממה שקראתי אשמח לעזרה

קישור לתוכן
שתף באתרים אחרים

כל מה שאמרת נכון, זה תלוי מה המתכנת בוחר.

לדוגמא, המתכנת יכול לבקש לפתוח סוקט שמקשיב בפורט 6488 לפרוטוקול UDP (שזה datagram).

לחילופין, המתכנת יכול לבקש לפתוח חיבור TCP לשרת מרוחק (stream) בפורט 9999 על השרת המרוחק. הפורט על השמחשב שבו רצה התוכנה יכול להבחר באופן אוטומטי ע"י מערכת ההפעלה, או לחילופין (למיטב זכרוני) המתכנת יכול לבקש שהפורט המקומי יהיה ספציפי, לדוגמא 1234.

קישור לתוכן
שתף באתרים אחרים

אני ראיתי דוגמא מעניינת וקצת לא ברור לי מה הולך שם, אשמח אם תעזרו לי :)

http://img850.imageshack.us/img850/4558/5xyd.jpg

רואים שם 2 תוכנות מחוברות לאותו סוקט והסוקט הזה מחובר לפורט מסויים, איך יכול להיות 2 תוכנות על אותו פורט? מה לגבי סוג הסוקט, בתמונה מראים 2 תוכנות לאותו סוקט, זה אומר שהסוקט הזה הוא אותו סוג? נגיד מסוג stream?

- - - תגובה אוחדה: - - -

אבל גם שם על המתכנת לבצע בקשה נכונה ("פתח לי סוקט שמקשיב על פורט 21").

אשמח אם תסתכל על הקישור שרשמתי , איך יכול להיות 2 שמחוברות לאותו סוג סוקט שמחובר לאותו פורט

זה לא עושה סלט במידע?

קישור לתוכן
שתף באתרים אחרים

לכל סוקט יש שני פורטים - פורט השרת ופורט הלקוח.

לדוגמה:

השרת מאזין על פורט 1234

הלקוח פותח סוקט על פורט אקראי כלשהו (לדוגמה 27272) ומתחבר לשרת בפורט 1234.

עכשיו יש סוקט שמחבר ביניהם. הסוקט הזה מאופיין ע"י ארבעה פרמטרים - כתובת הלקוח, פורט הלקוח, כתובת השרת ופורט השרת.

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

קישור לתוכן
שתף באתרים אחרים

לכל סוקט יש שני פורטים - פורט השרת ופורט הלקוח.

לדוגמה:

השרת מאזין על פורט 1234

הלקוח פותח סוקט על פורט אקראי כלשהו (לדוגמה 27272) ומתחבר לשרת בפורט 1234.

עכשיו יש סוקט שמחבר ביניהם. הסוקט הזה מאופיין ע"י ארבעה פרמטרים - כתובת הלקוח, פורט הלקוח, כתובת השרת ופורט השרת.

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

שניצל תסתכל בקישור שרשמתי למעלה, אני רואה שם 2 מחוברות לאותו סוקט, והסוקט הזה מחובר שם לפורט 2 איך יכול להיות? שלשני תוכנות יש את אותו פורט

קישור לתוכן
שתף באתרים אחרים

בעקרון זה אפשרי ששתי תוכנות יחלקו סוקט, כי בסופו של דבר הסוקט מנוהל ע"י מערכת ההפעלה, והיא נותנת לתוכנה גישה אליו. אבל העבודה הזו היא די מסורבלת כי לשתי התוכנות תהיה גישה את הסוקט, והן "יריבו" מי תקרא ממנו קודם את המידע. באופן כללי עדיף להימנע מזה.

קישור לתוכן
שתף באתרים אחרים

קראתי על המחלקה IPHostEntry

והבנתי שכאשר אני מייצר אובייקט מסוג המחלקה הזאת הוא מכיל מידע על אותו host

למשל בדוגמא הבאה:

;("IPHostEntry hostInfo = Dns.GetHostByName("www.contoso.com

איזה מידע יחזיק hostInfo?

במקרה הזה הוא יחזיק את הכתובת IP של אותו domain name? איזה מידע נכנס בדרך כלל לאובייקט של אותה מחלקה, הבנתי שמידע רק אני לא יודע איזה מידע בדיוק

קישור לתוכן
שתף באתרים אחרים

http://msdn.microsoft.com/en-us/library/system.net.iphostentry(v=vs.110).aspx

אתה יכול לראות שם איזה שדות יש לו. בגדול זה כמו שאמרת, הוא יחזיק את רשימת כתובות ה-IP ורשימה של aliases (כתובות אחרות שיגיעו לאותו ip).

קישור לתוכן
שתף באתרים אחרים

http://msdn.microsoft.com/en-us/library/system.net.iphostentry(v=vs.110).aspx

אתה יכול לראות שם איזה שדות יש לו. בגדול זה כמו שאמרת, הוא יחזיק את רשימת כתובות ה-IP ורשימה של aliases (כתובות אחרות שיגיעו לאותו ip).

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

IPHostEntry בכתובת של אותו מחשב? משם בעצם הוא בודק מול איזה מחשבים הוא מתקשר?

קישור לתוכן
שתף באתרים אחרים

אין צורך לצטט את ההודעה האחרונה כשאתה מגיב עליה.

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

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...