SSL客户端程序在发送后关闭(python)
Posted
技术标签:
【中文标题】SSL客户端程序在发送后关闭(python)【英文标题】:SSL client program getting closed after sending (python) 【发布时间】:2021-11-04 21:43:08 【问题描述】:我创建了一个简单的程序,将字符串从我的 PC 上的客户端发送到不同设备上的服务器。 我正在使用下面的代码。
host = '192.168.1.105'
portNumb = 5000
data="hello world"
soc=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
context=ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
sslConn=context.wrap_socket(soc)
sslConn.connect((host,portNumb))
sslConn.send(data.encode())
当我检查wireshark日志时,客户端正在发送字符串但立即关闭连接,甚至不等待来自服务器的ACK。而且字符串也没有到达服务器(我检查了日志)。
谁能建议我一个解决方法?有没有像 recv() 这样的东西我错过了,或者我应该和这个或其他东西一起运行服务器程序?
【问题讨论】:
“当我检查wireshark日志时,客户端正在发送字符串但立即关闭连接,甚至不等待来自服务器的ACK。” - 请显示实际输出. ACK 很可能在客户端对 FIN 的响应中。对 TCP/TLS 的工作方式可能存在错误的预期:应用程序不等待交付 - 它会将数据发送到 OS 内核,然后由其关心交付。如果您希望客户端等待服务器已读取并可能处理数据,您必须在协议中添加某种应用程序级别的确认。 【参考方案1】:我认为你正在关闭连接,sslConn.close
sslConn.send(data.encode())
while sslConn.recv(server_port_number) != "ack":
print "waiting for ack"
print "ack received!"
#send disconnect message
dmsg = "disconnect"
sslConn.send(dmsg)
sslConn.close()
【讨论】:
以上是关于SSL客户端程序在发送后关闭(python)的主要内容,如果未能解决你的问题,请参考以下文章
WARN 发送 SSL 关闭消息失败(Kafka SSL 配置问题)
Android - 客户端关闭连接发送图像,然后接收回字符串