我有一个简单的服务器客户端程序。服务器每秒向客户端发送一个字符串
import socket
import time
initialSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
initialSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
initialSocket.bind(('localhost', 12345))
initialSocket.listen()
rwSocket, address = initialSocket.accept()
initialSocket.close()
k = 1
while True:
message = '[%d] Hi there!' % k
rwSocket.sendall(message.encode('utf-8'))
print(message)
time.sleep(1)
k += 1
rwSocket.close()
。。。当客户端只打印它接收到的内容时:
import socket
rwSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
rwSocket.connect(('localhost', 12345))
message = rwSocket.recv(1024)
while message:
print(message.decode('utf-8'))
message = rwSocket.recv(1024)
rwSocket.close()
一切正常,直到我发出sudo ifconfig lo down
,等待一段时间,然后使用sudo ifconfig lo up
重新建立连接。客户端的套接字最终会唤醒并再次开始接收消息(包括在失去连接期间丢失的所有消息),但这样做可能需要任意时间。这段时间似乎与连接中断的时间无关。例如,连接可能中断5秒钟,客户端的套接字需要一分钟才能唤醒,反之亦然
对此有什么办法吗?是否可以立即检测到连接的重新建立?客户端是否可以在重新建立连接后清除管道,以避免丢失的消息充斥其中?任何帮助都将不胜感激
目前没有回答
相关问题 更多 >
编程相关推荐