gpt4 book ai didi

python - 操作系统错误 : [Errno 9] Bad file descriptor

转载 作者:行者123 更新时间:2023-12-04 22:41:27 27 4
gpt4 key购买 nike

我最初尝试使用 python 运行但有不同的错误,所以我尝试使用 python3 并收到标题中的错误。我正在尝试连接到服务器并下载已实现 tls 的文件。

import socket, ssl, pprint
import os, time
import threading

def main():
s2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ssl_sock = ssl.wrap_socket(s2,
server_side = False,
ca_certs="CA.crt",
cert_reqs=ssl.CERT_REQUIRED)
s2.connect(('localhost',10024))
filename = raw_input("What file do you wish to download? -> ")

if filename != 'q':
s2.send(filename)

data = s2.recv(1024)
if data [:7] == 'fEXISTS':
fSize = long(data[7:])

message = raw_input("The file you wish to download is " +str(fSize)+\
"bytes, would you like to proceed? (y/n): ")

if message == 'y':
s2.send ('OK')
f = open('new_'+filename, 'wb')
data = s2.recv(2000000)
totalRecv = len(data)
f.write(data)

while totalRecv < fSize:
data = s2.recv(2000000)
totalRecv += len(data)
f.write(data)
progress = ((totalRecv/float(fSize))*100)
print ("{0: .2F}".format(progress)+\
"% Completed")
else:
print ("ERROR: File does not exist!")
s2.close()

if __name__ == '__main__':
main()

最佳答案

在 SSL 上下文中包装套接字后(使用 ssl.wrap_socket ),您不应该再使用原始套接字了。

您应该调用 connect , send , recv等关于 ssl_sock ,而不是 s2 .

(具体来说,当您调用 ssl.wrap_socket 时,会在原始套接字上调用 .detach 方法,该方法会从中删除文件描述符。文件描述符被传输到 SSL 套接字实例。您唯一可以对原始套接字执行的操作接近/摧毁它。)

关于python - 操作系统错误 : [Errno 9] Bad file descriptor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60062124/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com