簡體   English   中英

套接字Python連接

[英]Sockets Python Connection

我正在使用套接字在Python中編寫客戶端/服務器軟件。

我有一個問題,特別是TCP / IP和Socket模型:

我在我的服務器端使用這個代碼示例(Python中的服務器端程序):

import socket
# Create a TCP/IP socket
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# Prevent from "address already in use"
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

# Bind the socket to port
server_address = ("localhost", 5000)
server.bind(server_address)

# Listen for connections
server.listen(5)

# Wait for on incomming connection
read = connection.recv(1024)
print "Received: ",read

一切都很好, 但我有一些概念性的問題:

1)如何實現這種通信的最佳實踐? 我是否必須為CLIENT和SERVER程序之間的TCP / IP設置心跳流量? 我看到即使我離開客戶端程序沒有流量(空閑)與服務器,當我回來並發送另一條消息(連接建立后的很多分鍾和幾分鍾)消息仍然存在。 這是正常的行為嗎?

2) TCP / IP堆棧甚至“插座模塊”都有任何TIMEOUT功能?!?! 誰可以使用套接字模塊控制丟失我們在Python中的“超時”連接?

Tks for all!

在TCP中,不需要心跳來保持連接活動。 只要兩個端點仍然健康,連接就會存在。

但是,心跳可能有助於及早發現故障。 否則,您只會在嘗試發送數據(或期望另一端發送數據)時才知道連接是否仍然存在。 在許多情況下,這已經足夠了。 但對於某些人(如IRC應用程序),您希望在客戶端關閉后立即知道,因此您可以通知其他人他們已從通道中刪除。

您可以使用SO_KEEPALIVE套接字選項自動發送心跳包,但我沒有使用它的經驗。 這個問題可能會有所幫助。

對於超時,請使用SO_RCVTIMEOSO_SNDTIMEO套接字選項。 有關更多信息,請參閱man 7 socketPython套接字文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM