我有一个简单的套接字服务器设置,可以将一些数字发送到 Intranet 中的客户端。server.py
在测试时,我从终端(CTRL+ )停止了脚本,C这后来在我尝试访问同一页面时导致 Safari 中的服务器繁忙错误。
我看到了这个serverfault 问题但问题是:
我找不到
/etc/init.d/networking restart
文件。我正在使用 Mac,这是针对 Linux 的。每次我测试我的服务器时,这也是一种矫枉过正。每小时至少10次。在代码中插入选项
SO_REUSEADDR
确实有帮助Address already in use
,但我认为我的服务器已启动但处于忙碌状态。使用此处的答案,我将代码编辑为:
host = <my machine address>
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
port = 8080
s.bind((host, port))
我在我的服务器上进行了哪些更改以消除 Safari 中的此错误?
Safari无法打开“my-ip”页面,因为服务器意外断开了连接。当服务器繁忙时,有时会发生这种情况。等待几分钟,然后重试。
lsof -i:8080
的, 停止脚本后的输出是
python3.7 11881 <user> 3u IPv4 <Device> 0t0 TCP <my machine address>?:http-alt (LISTEN)
我做了kill 11881
然后重新运行代码,但在 Safari 中得到了相同的消息。
的输出netstat -na | grep "8080"
是
tcp4 0 0 <my machine address>.8080 *.* LISTEN
当脚本运行时,我什么都没有KeyboardInterrupt
。
Firefox暂时显示该页面,然后显示错误页面
连接被重置
Chrome只显示一个空白页面。
更新:它适用于 python 2.7,但不适用于 3.5。代码的不同之处在于:
c.send('\n')
在 2.7 和
c.send(bytes('\n'.encode('utf-8')))
在 3.5 中
c
是
c, (client_host, client_port) = s.accept()
休息都是一样的。