Python中TCP和UDP用法

2021-09-18 05:43:32 字數 2815 閱讀 2450

socket(簡稱 套接字) 是程序間通訊的一種方式,它與其他程序間通訊的乙個主要不同是:它能實現不同主機間的程序間通訊,socket屬於全雙工。

關於建立套接字的引數說明:

socket.socket(addressfamily, type)

address family:可以選擇 af_inet(用於 internet 程序間通訊) 或者 af_unix(用於同一臺機器程序間通訊),實際工作中常用af_inet

type:套接字型別,可以是 sock_stream(流式套接字,主要用於 tcp 協議)或者 sock_dgram(資料報套接字,主要用於 udp 協議)

udp 是user datagram protocol的簡稱, 中文名是使用者資料報協議

。一種無連線傳輸層協議,提供面向事務的簡單不可靠資訊傳送服務。類似於日常生活中寫信的場景,不需要建立鏈結,不關心傳送結果。

# 1、建立套接字

udp_socket = socket.socket(socket. af_inet, socket.sock_dgram)

# 2、繫結埠 作為客戶端udp一般不繫結埠號

udp_socket.bind((「」, 7788))  # ip位址不寫,預設本機任何乙個ip

# 3、傳送資料

socket.sendto(『hello python』.encode(『utf-8』), (『192.168.21.66』, 7788))

#4、接收資料

recv_data = socket.recvfrom(1024)  # 返回元組資訊包含資料和傳送方的ip以及埠

# 5、關閉套接字

socket.close()

str.encode(『utf-8』),把字串編碼成位元組碼,utf-8代表的是國際碼,gbk代表的是漢字碼

bytes.decode(『utf-8』),把位元組碼解碼成字串。

tcp協議,傳輸控制協議(英語:transmission control protocol,縮寫為 tcp)是一種面向連線的、可靠的、基於位元組流傳輸層通訊協議。tcp通訊需要經過建立連線、資料傳送、終止連線三個步驟。類似於日常生活中打**的場景,需要建立鏈結,確認傳送結果,安全傳輸。

tcp嚴格區分客戶端和服務端,服務端一般都需要繫結埠,否則客戶端找不到該伺服器,客戶端一般不繫結埠,如果客戶端繫結埠就會出現埠衝突導致無法多開的問題。

面向連線(確認有建立三方交握,連線已建立才作傳輸。);有序資料傳輸;重發丟失的資料報;捨棄重複的資料報;差錯的資料傳輸;阻塞/流量控制。

tcp客戶端:

# 建立套接字

tcp_client_socket = socket.socket(socket.sock_af_inet, socket.sock_stream)

# 鏈結伺服器

tcp_client_socket.connect((『server_ip』, server_port))

# 向伺服器傳送資料

tcp_client_socket.send(『hello』.encode(『utf-8』))

# 接收伺服器回送資料

recv_data = tcp_cilent_socket.recv(1024)  # 返回的是位元組型別的資料

# 關閉套接字

tcp_client_socket.close()

tcp服務端:

# 建立套接字

tcp_sever_socket = socket.socket(socket.af_inet, socket.sock_stream)

# 繫結埠資訊,一定要做

tcp_server_socket.bind((「」, 7788))

# 把監聽由主動變為被動

tcp_server_socket.listen(128)

# 等待客戶端鏈結,在鏈結之前處於堵塞狀態,一直到客戶端鏈結才會解堵塞

# 返回乙個新的套接字專為客戶端服務、以及客戶端的ip、port

new_client_socket, client_addr = tcp_server_socket.accept()

# 等待客戶端傳送資料

recv_data = new_client_socket.recv(1024).decode(『utf-8』)

# 可以給客戶端回送資料

new_client_socket.send(『hello』.encode(『utf-8』))

# 為該客戶端服務完畢之後關閉套接字

new_client_socket.close()

# 關閉伺服器端套接字

tcp_server_socket.close()

listen(backlog)數值代表的含義?

監聽變主動為被動,backlog指定最多允許多少個客戶連線到伺服器。它的值至少為1。收到連線請求後,這些請求需要排隊,如果佇列滿,就拒絕請求

。請注意,最大限制是取決於作業系統,ubuntu上預設是128

tcp服務端recv解堵塞的兩種方式?

1、收到客戶端傳送的資料

2、客戶端關閉了套接字

可以通過判斷收到資料的長度來判斷客戶端是否下線,長度為0代表已下線。

Python3 x基礎學習 UDP和TCP用法

傳送資料 1.建立socket 套接字 2.使用socket傳送或接收資料 3.關閉套接字 import socket 1.建立socket 套接字 物件 udp socket socket.socket family socket.af inet,type socket.sock dgram 2....

python網路程式設計 udp和tcp

udp伺服器import socket s socket.socket socket.af inet,socket.sock dgram s.bind 192.168.1.103 8888 while true data,addr s.recvfrom 1024 print s s str addr...

Python教程 UDP和TCP用法

udp 傳送資料 1.建立socket 套接字 2.使用socket傳送或接收資料 3.關閉套接字 import socket 1.建立socket 套接字 物件 udp socket socket.socket family socket.af inet,type socket.sock dgra...