TCP和UDP程式設計理解:bind ,recv,recvfrom,send,sendto
阿新 • • 發佈:2019-01-02
1:作為客戶端,呼叫 connect ,那麼這個 bind
函式是為了繫結到都固定
IP 和埠作為自己
socket 地址。
2:作為伺服器,呼叫 accept ,bind 是用來繫結到監聽固定的 socket 地址資料,對於外來 socket,只有來之對應 IP 並連結的目標埠號才可以連結本伺服器。
二:TCP 和 UDP 通訊收發函式區別(記住soket中是否存放有IP 和埠資訊,TCP有,UDP無,同時TCP伺服器需要多個 socket 物件,對應多個連線)
1:TCP用send
和 recv :
這是因為每個TCP都有一個連線,每次連線完成後,都會把連線的資訊記錄在
socket 中,這樣每次收發資料都知道對方和自己的 IP 地址還有埠號,無需再次指定。 記錄是發生在 accept 和 connect 呼叫完成後。
1)connect 呼叫因為只有一個socket 連線,就記錄在本地。
2)而對於accept 由於有多個連線,所以 accept 會返回一個 socket 物件,對應一個TCP連線,記錄對應的IP和埠。
2:UDP
利用 sendto() 和 recvfrom()
1)recvfrom 會返回傳送端的地址,這樣對伺服器來說,由於時 UDP socket 物件沒有記錄對應的IP和埠資訊(記錄也沒有用,UDP不穩定 ,隨時可能變化),會需要用到改地址給客戶端來發送響應。
對於客戶端,由於每次始終是知道伺服器IP地址和埠(和一個伺服器互動),所以無需記錄(除非UDP客戶端需要和多個伺服器互動,需要一一記錄,才能確保互動正確)
2)sendto
由於沒有記錄IP 和埠在 socket 物件中,所以每次都需要指定接受方地址,
無論是客戶端和伺服器都需要用