與客戶端代碼不同(客戶端代碼請看我的上一篇博客),服務端需要系結埠號,設定監聽服務,多了兩個特殊的步驟,需要兩行新的代碼實作
準備:windows作為客戶端,windows上安裝網路除錯助手,linux作為服務端并且寫好如下代碼,并且查出自己服務端(linux虛擬機)上的ip地址為:

import socket
if __name__ == '__main__':
# 先建立服務端的套接字物件,第一個引數同樣是ipv4協議,第二個引數是TCP協議
tcp_server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 給程式系結埠號(相對于客戶端代碼多的步驟)
tcp_server_socket.bind(("", 9090))
# 設定監聽服務,等待客戶端向服務端發送資訊
# 100:最大等待建立連接的個數
tcp_server_socket.listen(100)
# 等待客戶端建立連接的請求, 只有客戶端和服務端建立連接成功代碼才會解阻塞,代碼才能繼續往下執行
# 1. 專門和客戶端通信的套接字: service_client_socket
# 2. 客戶端的ip地址和埠號: ip_port
result = tcp_server_socket.accept()
print(result)
# 關閉服務端的套接字, 終止和客戶端提供建立連接請求的服務
tcp_server_socket.close()
此時運行起來該程式,程式會停止在accept方法這,等待客戶端發送請求,此時打開網路除錯助手:

點擊連接,再回傳虛擬機可以看見如下代碼:

復制如下:
(<socket.socket fd=4, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=(‘192.168.52.128’, 9090), raddr=(‘192.168.52.1’, 50036)>, (‘192.168.52.1’, 50036))
此輸出為一個元組,第一個引數是一個新的套接字物件,后面的是來自于哪個ip地址發出的請求,也就是客戶端,此時打開cmd,輸入ipconfig,可以查得本機ip:

注意:此時的套接字物件為新的套接字物件,不再是之前的tcp_server_socket物件,bind(系結)后的套接字可以理解為被動的套接字,隨時準備接受來自客戶端的訊息,可以理解為之前的套接字物件產生一個新的物件去接管新的任務,如果還有客戶端發來新的訊息,那么tcp_server_socket又會產生一個新的套接字物件去接管新的任務,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/150953.html
標籤:其他
上一篇:初學Python必備十大經典案例(初學者必看)??????下
下一篇:Python實作掃碼工具
