我是堆栈溢出和套接字编程的新手。在此先感谢您的帮助!
一点背景:我正在尝试实现一个简单的 python 服务器。我正在尝试通过 TCP 连接,并且只是尝试从请求中返回一些已解析的文本(我正在尝试发回文本变量“消息”)。
但是,似乎即使在我关闭连接之后,服务器端套接字也会接受一些名为“/favicon.ico”的随机输入,我不确定这是从哪里来的。此循环接受“/favicon.ico”几次,然后返回到等待连接的状态。
有谁知道发生了什么? 这是我的代码:
#import socket module
from socket import *
serverSocket = socket(AF_INET, SOCK_STREAM)
#Prepare a sever socket
serverPort = 10016
serverName = '192.168.56.101'
serverSocket.bind((serverName,serverPort))
serverSocket.listen(0)
while True:
#Establish the connection
print 'Ready to serve...'
connectionSocket, addr = serverSocket.accept()
message = connectionSocket.recv(4096)
filename = message.split()[1]
#f = open(filename[1:])
print filename
connectionSocket.send(message)
connectionSocket.close()
print '\nYou got to this line\n'
-------------------------------------------------- ------------
这是我的客户端请求: http://192.xxx.56.101:10016/sophie.JPG(堆栈溢出让我失去了 IP)
还有我的客户端输出,似乎可以正常返回:
GET /sophie.JPG HTTP/1.1
Host: 192.168.56.101:10016
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
-------------------------------------------------- ------------
这是我的服务器端输出(打印语句):
name@name-VirtualBox:~/Documents/python_scripts$ python server2.py
Ready to serve...
/sophie.JPG
You got to this line
Ready to serve...
/favicon.ico
You got to this line
Ready to serve...
/favicon.ico
You got to this line
Ready to serve...
/favicon.ico
You got to this line
Ready to serve...
-------------------------------------------------- --------------------
我本来希望输出只是前四行:
Ready to serve...
/sophie.JPG
You got to this line
Ready to serve...
--------
我希望只有这四行返回,因为在连接关闭后服务器应该返回到它的等待状态。但是,它仍在接受一些名为/favicon.ico的输入,并在返回等待状态之前再循环运行几次。
有没有人知道这里发生了什么?
谢谢!
--------------------------------------
更新:
好的,所以我添加了您建议的行,并且我看到浏览器正在发送这些额外的请求并且它们(根据您)正在排队。
除此之外,我还更改了行:
serverSocket.listen(0)
至
serverSocket.listen(1)
然后我的代码按照我的意愿运行。(其实我现在又试了一次,并没有按预期运行。/favicon.ico请求还在发送中)
我想我对正在发生的事情有几个后续问题:
为什么浏览器在我没有要求时对/favicon.ico提出更多请求(使用原始代码 serverSocket(0)?
现在我已经允许服务器监听多个套接字连接,为什么虚假连接请求(/favicon.ico)消失了?
谢谢,我也会阅读同步 cookie。