1. 程式人生 > >基於tcp的socket通信

基於tcp的socket通信

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通信