我想設置一個服務器應用程序和客戶端應用程序,其中服務器將偵聽使用本地主機和某個端口的連接 - 但是 - 例如,如果端口是2001 - 如果該端口不是可用,我想使用2002年,如果那是2003年不可用 - 等我如何在我的代碼中實現?Python套接字端口使用
example = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
example.bind(("localhost",2001))
我想設置一個服務器應用程序和客戶端應用程序,其中服務器將偵聽使用本地主機和某個端口的連接 - 但是 - 例如,如果端口是2001 - 如果該端口不是可用,我想使用2002年,如果那是2003年不可用 - 等我如何在我的代碼中實現?Python套接字端口使用
example = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
example.bind(("localhost",2001))
可繞只是循環,直到它不產生異常
port = 2001
while True:
try:
example.bind(("localhost",port))
except:
port += 1
continue
break
,而不是試圖找到某種循環的可用空閒端口可以綁定到端口0
(零)並讓您的操作系統綁定到合適的空閒端口。然後,您可以通過使用socket.getsockname()
反思服務器套接字對象來訪問綁定的端口。我更喜歡將套接字綁定到由內核分配的隨機端口號,然後查詢打開的端口號。
example.bind((host,0)) #0-random, free port number
example.getsockname()
你可以在'try' -'except'內使用'example.bind(address,port)'.... –