Python使用socket返回HTTP响应触发WinError 10053错误如何解决
错误原因
- 非法的预发送内容:TCP连接建立后,你在没有收到HTTP请求的前提下,先发送了
Connected to the apps server!!!字符串,不符合HTTP协议规范。浏览器识别到非法响应后会主动断开连接,后续你发送正式HTTP响应时,连接已经被关闭,触发10053错误。 - 连接关闭逻辑错误:响应头中你指定了
Connection: close,要求响应返回后立即断开连接,但你发送完响应后没有主动关闭客户端socket,反而执行了sleep(5)。此时浏览器收到完整响应后会先断开连接,下一轮循环调用c.recv()或发送操作时,就会触发连接已被中止的报错。 - 请求终止判断错误:
recv()方法在对端断开连接时返回的是空字节b''而非None,你写的if(msg!=None)判断无法识别连接断开的状态,会继续向已关闭的连接发送数据,触发报错。
另外你提到的转encode后才出现错误属于逻辑巧合:转encode前发送字符串会直接抛出类型错误终止代码运行,不会触发后续的网络交互逻辑,转encode后代码可以正常执行,才暴露了之前的协议逻辑问题。
解决方案
按以下步骤修改代码即可解决问题:
- 删除TCP连接建立后、收到HTTP请求前的
c.send(bytes("Connected to the apps server!!!","utf-8"))语句,不要发送不符合HTTP规范的内容。 - 调整请求判断逻辑,收到空字节时主动终止当前连接的处理流程。
- 发送完所有响应内容后主动关闭客户端socket,不需要保留连接等待。
- 单次请求处理完成后重置连接变量,回到监听新连接的逻辑,支持多次请求处理。
修正后的完整代码
import socket server_socket1 = socket.socket() # 默认是SOCK_STREAM (TCP),使用AF_INET (IPv4)协议 server_socket1.bind(('127.0.0.1',9999)) # 绑定服务端接收连接的IP和端口 server_socket1.listen(2) # 当前仅接受2个连接,每个客户端对应一个 print("Server started successfully!!!") print("Waiting for connections...\n\n") while True: # 每次处理完一个连接后回到等待新连接的逻辑 c,addr = server_socket1.accept() print("User connected to client1 socket!!") print("Client connected ip address "+str(addr)) try: msg = c.recv(4096) if len(msg) == 0: c.close() continue headers, sep, body = msg.partition(b'\r\n\r\n') headers = headers.decode('utf-8') print(headers) html_body = "<html><body><h1>This is a test</h1><p>More content here</p></body></html>" response_headers = { 'Content-Type': 'text/html; encoding=utf8', 'Content-Length': len(html_body), 'Connection': 'close', } response_headers_raw = ''.join('%s: %s\r\n' % (k, v) for k, v in response_headers.items()) response_proto = 'HTTP/1.1' response_status = '200' response_status_text = 'OK' # 发送响应内容 r = '%s %s %s\r\n' % (response_proto, response_status, response_status_text) c.sendall(r.encode()) c.sendall(response_headers_raw.encode()) c.sendall(b'\r\n') # 分隔响应头和响应体 c.send(html_body.encode(encoding="utf-8")) finally: # 处理完成后主动关闭连接 c.close()
内容的提问来源于stack exchange,提问作者Priyansh Gupta
相关产品推荐
相关产品推荐

