gpt4 book ai didi

python - Python 中的简单套接字编程 : Bad Servers

转载 作者:太空宇宙 更新时间:2023-11-03 15:13:31 26 4
gpt4 key购买 nike

我正在尝试用 python 编写一个简单的文本/HTTP 服务器来模拟各种不良网络条件。首先,我想要一个服务器,它似乎会关闭连接而不向浏览器发送任何数据,以便可靠地创建“net::ERR_EMPTY_RESPONSE”浏览器错误。大多数关于套接字编程的教程都涉及如何创建好的服务器,而不是如何创建糟糕的服务器,所以我相信您可以在这里理解我的问题。

这是我目前所拥有的:

    import socket, sys, time

port = 8080
print "Bad server is listening on " + str(port)
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

serversocket.bind(('localhost', port))

serversocket.listen(5)

#simulate successful transport after the 5th attempt
counter = 0

while True:
#accept connections from outside
(clientsocket, address) = serversocket.accept()
time.sleep(1);

if counter > 5:
serversocket.write('<span class="position: relative; left: 20px;>hello</span>');

serversocket.close()

counter += 1

计数器是因为我认为如果服务器在第 5 次连接尝试后回复以模拟非常不可靠的网络连接可能会很好。

然而,尽管是一个坏服务器,坏服务器本身不应该崩溃。当我运行该代码时,我得到:

    Bad server is listening on 8080
Traceback (most recent call last):
File "bad_server.py", line 16, in <module>
(clientsocket, address) = serversocket.accept()
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/socket.py", line 195, in accept
sock, addr = self._sock.accept()
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/socket.py", line 165, in _dummy
raise error(EBADF, 'Bad file descriptor')
socket.error: [Errno 9] Bad file descriptor

这是不可取的。坏服务器应该继续监听连接。

在完成这项工作后,我的下一个任务是尝试让一个坏服务器突然终止其回复,从而导致浏览器中出现 net::ERR_ABORTED。我不知道我会怎么做。任何帮助将不胜感激。

最佳答案

您应该使用clientsocket 与客户端对话; serversocket 只是监听。

while True:
#accept connections from outside
(clientsocket, address) = serversocket.accept()
time.sleep(1);

if counter > 5:
clientsocket.write('<span class="position: relative; left: 20px;>hello</span>');

clientsocket.close()

counter += 1

此外,您没有重置counter,因此第五次连接之后的每个连接都会“成功”。希望这是需要的。

关于python - Python 中的简单套接字编程 : Bad Servers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23859029/

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