קבלת ה"URL המלא" בחיבור TCP בGO
-
-
@nigun אמר בקבלת ה"URL המלא" בחיבור TCP בGO:
אני רוצה להתחבר לשרת TCP עם בקשה כזאת
tcp:127.0.0.1:8080/play?file=1זה לא קיים ב-TCP. פרוטוקול TCP פותח ערוץ פשוט, אין פרמטרים.
נראה לי שבפרוטוקול fastAGI הפרמטרים נשלחים בתחילת ההתקשרות דרך ערוץ ה-TCP. -
@nigun אני לא מבין בדיוק את השאלה שלך.
TCP זה פרוטוקול בינארי להקמת ערוץ התקשרות בין שתי מכונות מרוחקות. אחרי הקמת הערוץ אפשר לשלוח דרכו מה שאתה רוצה.
HTTP זה פרוטוקול (פרוטוקול = שפה מוסכמת) טקסטואלי שמגדיר דרך לבקש/לעדכן/ליצור/למחוק וכו' משאבים משרת אינטרנט דרך ערוץ TCP. תקשורת HTTP משתמשת ב-TCP מתחתיו להקמת הערוץ והוא מעביר את ההתקשרות על גבי ערוץ ה-TCP.
כמו"כ AGI. זה פרוטוקול טקסטואלי שמדבר מעל גבי פרוטוקול TCP.פרמטרים ב-HTTP נשלחים בשורה הראשונה של הבקשה, דוגמה:
GET /some-page?some_parameter=some_value HTTP/1.1
פרמטרים ב-AGI נשלחים מיד בפתיחת הערוץ בפרומט זה:
agi_xxxx: yyyyyy agi_zzz: qqqqq
-
@yossiz
לפני זה הבנתי אותי מצויין
אני יסביר טיפה יותר
בקוד הזה ניתן לקבל את הכתובת IP + פורט של הלקוח (הקוד לא מדיוק, זה רק לרעיון)l, err := net.Listen("tcp", PORT) conn, err := l.Accept() log.Print(conn.RemoteAddr().String())
אבל אי אפשר לקבל את שאר הבקשה.
כנראה שבפרוטוקול TCP נשלח רק הכתובת + הפורט ואולי הTimeout
(ככה נראה מכאן) -
@nigun הפורט וה-IP הם פרטים של הערוץ ונשלחים כחלק מפרוטוקול TCP (או יותר נכון ה-IP נשלח כחלק מפרוטוקול IP שזה שכבה נמוכה יותר מ-TCP, והפורט הוא חלק מפרוטוקול TCP).
"שאר הבקשה" זה המידע שנשלח על גבי ערוץ ה-TCP (לא כחלק מפרוטוקול TCP).
להסביר יותר, בכל פקטת TCP יש את המעטפת שזה כל הפרטים שקשורים לניהול הערוץ שהם חלק מפרוטוקול TCP ויש את השדה של ה-payload, שזה המידע שאתה שולח על גבי הערוץ.
תפתח הקלטת wireshark ותראה את זה.אפשר לקבל את הבקשה על ידי קריאת
read
על ה-conn