# socket # socekt是應用層與TCP/IP協議族通訊的中間軟件抽象層,它是一組接口。在設計模式中,socket其實就是一個門面模式,它 # 把複雜的tcp/ip協議族隱藏在socket接口後面,對用戶來講,一組簡單的接口就是所有,讓socket去組織數據,以符合指定的協議 # socket # 基於文件類型的套接字家族(通常不用) # 套接字家族的名字:AF_UNIX # unix一切皆文件、基於文件的套接字調用的就是底層的文件系統來取數據,兩個套接字進程運行在同一個機器上,能夠經過訪問同一個文件系統間接完成通訊 # 基於網絡類型的套接字家族 # 套接字家族的名字:AF_INET(表明IPV4),經常使用 # 還有AF_INET6被用於IPV6
server.py設計模式
import socket sk = socket.socket() # 建立一個socket #sk.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1) # 避免服務重啓的時候報address already in use。加上這個解決 sk.bind(('127.0.0.1', 8080)) # 綁定,接收的參數是一個元組 sk.listen() # 監聽 conn, addr = sk.accept() # 阻塞等待別客戶端連接,客戶端連接上來後獲得其連接符與目標ip地址 # print(conn, addr) ret = conn.recv(1024) # 接收客戶端數據 print(ret.decode('utf-8')) # 解碼顯示 str = '你好' # conn.send(str.encode('utf-8')) # 給客戶端發送數據,在網路上只能傳輸bytes類型,也就是二進制 # conn.send(b'hello client') conn.send(bytes('你好', encoding='utf-8')) conn.close() # 關閉與客戶端的連接 sk.close() # 關閉socekt
client.py網絡
import socket sk = socket.socket() # 建立socket sk.connect(('127.0.0.1', 8080)) # 客戶端發起連接 str = '你好服務端' #sk.send(str.encode('utf-8')) # 編碼發送 #sk.send(bytes('你好服務端', encoding='utf-8')) sk.send(bytes('你好服務端'.encode('utf-8'))) ret = sk.recv(1024) print(ret.decode('utf-8')) # 解碼 sk.close()