udp:相當於寫信,需要ip,埠,內容 然後一起發出。不安全,甚至可能丟或者被別人收走
tpc:相當於打**,連線時需要應答,超時後會驗證,比較麻煩但是比較安全。雖然內容可能丟失,
套接字是全雙工的
udp:
流程:1.建立套接字
2.接受/傳送資料
3.關閉套接字
傳送資料
建立套接字:
概念:s = socket.socket(addressfamily(協議ipv4,ipv6),type(型別tcp,udp)) 建立的是物件
例子:s = socket.socket(socket.af_inet,socket.sock_stream/socket.sock_dgram)
傳送資料:
s.sendto(b'hello',('127.0.0.1',8080))
關閉套接字:
s.close()
接收資料
tcp:
明確區分服務端和客戶端,傳送時,好像都不需要自己繫結ip和埠
1.客戶端和udp使用類似:
1.建立套接字
tcp_client = socket.socket(socket.af_inet,socket.sock_stream)
2.連線伺服器的ip和埠
tcp_client.connect((ip,port)) 元組
3.傳送資料:
send_data = input('請輸入傳送內容:')
tcp_client.send(send_data.encode('utf-8'))
4.關閉套接字:
tcp_client.close()
2.服務端
1.在 accept 前加迴圈 為迴圈為多個客戶端服務
2.在 recv 前加迴圈,在為多個客戶服務時,迴圈為乙個客戶服務
3.如果客戶端解堵塞有兩種原因:
1.對方傳送資料 ,所以 recv 便解堵塞
2.對方呼叫了 close() 也會
4.服務端在接收到檔名時應該用try來開啟檔案,不應該用with open來開啟否則,如果檔名不存在,用with open 會出錯誤
5.客戶端要判斷服務端傳送的資料是否為空,不然會建立空文字
總的注意事項:
1. tcp伺服器一般情況下都需要繫結,否則客戶端找不到這個伺服器,更無法鏈結到伺服器
2. tcp客戶端一般不繫結,因為是主動鏈結伺服器,所以只要確定好伺服器的ip、port等資訊就好,本地客戶端可以隨機。而且可以避免開啟伺服器時發生埠問題
3. tcp伺服器中通過listen可以將socket建立出來的主動套接字變為被動的,這是做tcp伺服器時必須要做的
4.當客戶端需要鏈結伺服器時,就需要使用connect進行鏈結,udp是不需要鏈結的而是直接傳送,但是tcp必須先鏈結,只有鏈結成功才能通訊
5.當乙個tcp客戶端連線伺服器時,伺服器端會有1個新的套接字,這個套接字用來標記這個客戶端,單獨為這個客戶端服務
6. listen後的套 接字是被動套接字,用來接收新的客戶端的鏈結請求的,而accept返回的新套接字是標記這個新客戶端的
7.關閉listen後的套接字意味著被動套接字關閉了,會導致新的客戶端不能夠鏈結伺服器,但是之前已經鏈結成功的客戶端正常通訊。
8.關閉accept返回的套接字意味著這個客戶端已經服務完畢
9.當客戶端的套接字呼叫close後,伺服器端會recv解堵塞,並且返回的長度為0,因此伺服器可以通過返回資料的長度來區別客戶端是否已經下線
Python網路程式設計學習筆記一 socket模組
coding utf 8 主要測試python網路程式設計中socket模組的使用 涉及到的技術點 套接字 面向連線的還有非面向連線套接字 tcp面向連線 udp非面向連線 1 匯入socket 2 建立socket socket三要素 1 socket family,2 socket type 3...
python複習筆記(一)
一 問題獲取 今天在網上閒逛的時候,偶然看到了乙個系類教程python快速教程,點進去看看別人的心得經驗,順便鞏固一下python基礎知識,看到python標準庫01 正規表示式 re包 的時候,下邊有乙個小小的練習,順手一做並記錄下來。題目如下 練習 有乙個檔案,檔名為output 1981.10...
Python複習筆記 檔案
open filename,mode mode 唯讀 r 只寫 w 追加 a 讀寫 r 二進位制讀 rb,wb,ab,r b read 讀全部檔案 read size 讀size個位元組 readline 讀開始一行 readlines 讀所有行到乙個list write string 寫入字串,非...