1.服務端(即pc)
import socket import time HOST = '#.#.#.#' #連接本地服務器,可通過ipconfig/all看IPV4的地址 PORT = 8001 #設置端口號,自己設置即可 # socket.AF_INET用於服務器與服務器之間的網絡通信 # socket.SOCK_STREAM代表基於TCP的流式socket通信 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.bind((HOST, PORT)) #綁定端口,告訴別人,這個端口我使用了,其他人別用了 sock.listen(5) #監聽這個端口,可連接最多5個設備 while True: #死循環,服務器端一直提供服務。 connection,address = sock.accept() #接收客戶端的連接請求 try: connection.settimeout(10) #設置10s時限 buf = connection.recv(1024)#接收數據實例化 if buf: #接收成功 connection.send(b'welcome to server!') #發送消息,b表示bytes類型 print('Connection success!') else: #接收失敗 connection.send(b'Please go out!') except socket.timeout: #超時 print('time out!') connection.close() #關閉連接
2.客戶端(即樹莓派端)
import socket import time HOST = '#.#.#.#' #指服務端IP地址 PORT = 8001 #端口號 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((HOST,PORT)) #注意,在客戶端是連接connect,而在服務端是bind time.sleep(2) sock.send(b'1') #發送信息 print(sock.recv(1024).decode()) #打印接收消息,並且譯碼 sock.close() #關閉連接
3. socket的基本通信原理
socket是在應用層和傳輸層之間的一個抽象層,socket本質是編程接口(API),它把TCP/IP層復雜的操作抽象為幾個簡單的接口供應用層調用以實現進程在網絡中通信。TCP/IP只是一個協議棧,必須要具體實現,同時還要提供對外的操作接口(API),這就是Socket接口。通過Socket,我們才能使用TCP/IP協議。
在Client和Server建立連接成功后,兩端都會產生一個Socket實例,操作這個實例,完成所需的會話,而我們就通過這些API進行網絡編程,不需要去關心底層的實現了。 Socket連接過程分為三個步驟:服務器監聽,客戶端請求,連接確認。


