基於tcp的socket通訊

# 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()

 

相關文章
相關標籤/搜索