0

我有一个简单的套接字服务器设置,可以将一些数字发送到 Intranet 中的客户端。server.py在测试时,我从终端(CTRL+ )停止了脚本,C这后来在我尝试访问同一页面时导致 Safari 中的服务器繁忙错误。

我看到了这个serverfault 问题但问题是:

  1. 我找不到/etc/init.d/networking restart文件。我正在使用 Mac,这是针对 Linux 的。每次我测试我的服务器时,这也是一种矫枉过正。每小时至少10次。

  2. 在代码中插入选项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()

休息都是一样的。

4

1 回答 1

0

我不小心注释掉了一行

c.recv(1000)

c问题中提到了哪里。

当我将其与同一文件的旧版本进行比较时,我发现了它。

于 2019-06-30T18:32:49.063 回答