我正在尝试编写一个简单的文本/ HTTP服务器,该服务器在python中模拟各种不良的网络状况。首先,我希望服务器看起来像是关闭连接而不向浏览器发送任何数据,以便可靠地创建“ 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
,因此第五个之后的每个连接都会“成功”。希望这是期望的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句