- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
客户端:
data = b'\xff' * 1000000
ssock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
#context is created by ssl.create_default_context(ssl.Purpose.SERVER_AUTH)
ssock = context.wrap_socket(ssock, server_hostname='xd1337sv')
ssock.connect((SERVERADDR, SERVERPORT))
ssock.sendall(data)
#time.sleep(3)
ssock.close()
如果我只使用常规的非 SSL 套接字,则一切正常,服务器接收到准确数量的数据。如果我使用 TLS 套接字,则行为取决于版本。
如果我在 Python 3.6 上运行服务器或客户端,因此将使用 TLSv1.2,没有问题。只有在使用 TLSv1.3 时才会出现问题,这取决于 data
的大小以及执行客户端 ssocket.close()
行的时间。
如果我根据数据的大小在 ssocket.close()
之前放置适量的 time.sleep
,那么我就不会出错。否则,服务器将得到 ConnectionResetError [WinError 10054] An existing connection was forculously closed by the remote host
并且只接收部分数据,或者抛出 ConnectionAbortedError [WinError 10053] An established connection was被主机中的软件中止
并且没有收到任何数据。
我在本地地址 192.168.1.2
的本地机器上测试服务器和客户端。
最佳答案
差异是由 TLS 1.3 在 TLS 握手后发送 session 票证引起的,而对于以前的 TLS 版本, session 票证是在 TLS 握手中发送的。因此,对于 TLS 1.3,来自服务器的数据( session 票证)将在 ssock.connect(...)
完成后到达。由于您的应用程序在 connect
之后未读取任何数据,因此它关闭了套接字,而未读数据仍在底层 TCP 套接字的套接字缓冲区中。这将导致 RST 发送到服务器并导致连接重置错误。
这是应用程序从不尝试从服务器读取的已知问题。如果应用程序期望来自服务器的响应并使用 recv
获取它,这也将隐式读取 session 票证。
要在您不希望服务器返回任何应用程序数据时解决这种情况,请在关闭套接字之前对套接字进行适当的 SSL 关闭。由于这将读取服务器 SSL 关闭消息,因此它还将隐式读取服务器之前发送的 session 票证。
try:
ssock = ssock.unwrap()
except:
True
ssock.close()
有关更多信息,另请参阅 this issue和 this documentation .
关于Python 3.8 TLSv1.3 套接字关闭导致 ConnectionResetError 或 ConnectionAbortedError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59340474/
我正在使用 Python 3.6.0 + django 1.11 + windows 7 64 位 我的网站运行良好,但我不断收到此错误。 ConnectionAbortedError: [WinEr
我有一个要在本地运行的 Django 应用程序。我在 win32 上运行 Python 3.7。我在 Windows 的命令提示符中输入以下内容: $ python manage.py runserv
客户端: data = b'\xff' * 1000000 ssock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) #context
我有一个与 Redis 一起工作的 Celery 任务: @app.task(bind=True, name='task_a', max_retries=4, soft_time_limit_exce
安装 django 后何时开始浏览 http://127.0.0.1:8000/然后这个消息就会显示在 powershell 中。 Exception happened during processi
我正在将 django 与 postgresql 一起使用,每当我尝试保存或删除任何内容时,都会发生此错误 - Traceback (most recent call last): File "c:\
我是一名优秀的程序员,十分优秀!