חוקי הפורום

קבלת ה"URL המלא" בחיבור TCP בGO



  • אני רוצה להתחבר לשרת TCP עם בקשה כזאת
    tcp:127.0.0.1:8080/play?file=1
    ושאוכל לפרק את הפרמטרים בשרת למשתנים.

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



  • מעיון בקוד הנ"ל נראה שהוא סך הכל משתמש בערך נוסף שנשלח מעל TCP (ע"י אסטריסק)
    ולא לפרסס (איך אומרים parse בעברית?) ישירות מהבקשה.



  • @nigun אמר בקבלת ה"URL המלא" בחיבור TCP בGO:

    אני רוצה להתחבר לשרת TCP עם בקשה כזאת
    tcp:127.0.0.1:8080/play?file=1

    זה לא קיים ב-TCP. פרוטוקול TCP פותח ערוץ פשוט, אין פרמטרים.
    נראה לי שבפרוטוקול fastAGI הפרמטרים נשלחים בתחילת ההתקשרות דרך ערוץ ה-TCP.



  • @yossiz
    סתם לידע הכללי
    בHTTP זה נשלח בפרמטר נפרד דרך הערוץ?



  • @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
    סליחה שלא הסברתי
    השאלה שלי היית בגלל שיש פונקציה לקבלת הכתובת+פורט של הקליינט או השרת, גם בלי שזה נשלח כפרמטר.
    אז תהיתי האם שייך (באופן תיאורטי) לקבל גם את שאר הבקשה?



  • @nigun עכשיו אני עוד פחות מבין מה אתה שואל...



  • @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


התחבר כדי לפרסם תגובה