python - 每个请求两个连接
问题描述
对于以下代码,每次我连接到服务器时,我都会看到每个浏览器请求有两个连接。出了什么问题以及如何解决这个问题?
$ sudo python3 host.py
Connected by ('127.0.0.1', 60810)
Connected by ('127.0.0.1', 60812)
浏览器:
http://localhost:65432/
主机.py:
#!/usr/bin/env python3
import socket
HOST = '127.0.0.1' # Standard loopback interface address (localhost)
PORT = 65432 # Port to listen on (non-privileged ports are > 1023)
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((HOST, PORT))
s.listen()
while True:
conn, addr = s.accept()
with conn:
print('Connected by', addr)
data = conn.recv(1024)
conn.sendall(data)
此外,每次我按 ^C 并再次运行脚本时,我都会得到
Traceback (most recent call last):
File "host.py", line 9, in <module>
s.bind((HOST, PORT))
OSError: [Errno 98] Address already in use
一分钟,在此期间无法连接。它看起来像一个超时。
解决方案
您的浏览器尝试连接几次,这是您看到的两个连接。
拥有进程关闭后,系统将保持绑定端口打开一段时间。如果您在这段时间内尝试再次绑定到同一个端口,您将收到Address already in use。您可以设置SO_REUSEADDR
标志以便能够立即重用端口:
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sudo
注意:只要您的端口号大于 1024,就不需要使用。
推荐阅读
- ios - SpriteKit:无法点击覆盖的节点
- android - 带有 FirebaseJobDispatcher 的 Android 8.0 后台计划任务
- node.js - Nginx:proxy_pass + websocket + 基本认证 + Safari = 访问日志中的无限循环
- java - Spring @Transactional 在异常时始终如一地回滚事务
- machine-learning - 一热编码标签___多热编码输出_Keras
- python - 无法安装 PyMySQL
- c# - 具有复合键的 SortedDictionary:由 1 个属性索引并由另一个属性排序
- java - java.lang.IllegalStateException:另一个 SimpleCache 实例使用该文件夹:
- python - Pandas 将所有列的值连接到一个新的列列表中
- html - 如何使用css flexbox创建水平滚动?