基於tcp的socket通信
阿新 • • 發佈:2018-10-04
png mage lis 數據 基於 ets class inf nbsp
# 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()
基於tcp的socket通信