在服務端,accept函式的其中乙個入參是listen-socket,會返回乙個新的connection-socket。通過connection-socket,呼叫getpeername,可以得到客戶端的ip和埠。通過connection-socket,呼叫getsockname,可以得到本地的ip和埠。
按我直觀的理解,這個埠應該是個隨機的埠,因為connection-socket是新建的socket,是和listen-socket不同的socket。但事實令我不解,這個埠竟然和listen-socket繫結的埠是相同的。
answer:原來我們看socket,不能光看到通過socke api或accept api建立的socket,心中要有圖畫,這個socket是和遠方連線的。每個socket由四元組組成,本地ip,本地埠,遠方ip,遠方埠。雖然accept函式返回的connection-socket呼叫getsockname返回的ip和埠同listen-socket繫結的ip和埠是相同的,但因為他們的遠方連線的不同,所以他們是不同的socket。不要迷惑。
TCP程式設計
基於tcp 伺服器 程式設計步驟 1.建立乙個socket,用函式socket 2.繫結ip位址 埠等資訊到socket上,用函式bind 3.設定允許的最大連線數,用函式listen 4.等待來自客戶端的連線請求,用函式accept 5.收發資料,用函式send 和recv 或者read 和wri...
TCP程式設計
客戶端 匯入socket庫 import socket 建立乙個socket。af inet指ipv4協議,如果要用ipv6則指定af inet6.sock stream指定使用面向流的tcp協議 s socket.socket socket.af inet,socket.sock stream 建...
tcp程式設計
tcp連線屬於三次握手 syn 用於向對方發起連線請求的標誌,規定帶syn標誌的資料報佔乙個位元組的編號。j是順序號,ack 是用於應答的標誌,規定除了第一次的syn請求的資料報沒有ack,後面所有的資料報都帶有ack應答標誌。傳送j 1。j 1 5 j 6.三次目的 為了防止伺服器被惡意請求。資料...