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 配置问题)

实现 SSL 证书的 Python 套接字 [关闭]

Android - 客户端关闭连接发送图像,然后接收回字符串

多个服务器上的单个 SSL 证书以将推送通知发送到同一应用程序

强制 SSL 客户端套接字发送证书

将 MQTT 数据包装在 SSL 证书中,同时将其发送到 MQTT 代理