- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我是堆栈溢出和套接字编程的新手。预先感谢您的帮助!
一些背景知识:我正在尝试实现一个简单的 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 (堆栈溢出让我 x 出 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...
--------
我预计只有这四行返回,因为服务器应该在连接关闭后返回到它的waiting 状态。但是,它仍在接受一些名为 /favicon.ico 的输入,并在返回等待状态之前再循环几次。
有人知道这里发生了什么吗?
谢谢!
----------------------------------------
更新:
好的,所以我添加了您建议的行,并且我看到浏览器正在发送这些额外的请求并且它们(根据您的说法)正在排队。
除此之外,我还更改了行:
serverSocket.listen(0)
到
serverSocket.listen(1)
然后我的代码按我希望的方式运行。 (其实我现在又试了一遍,并没有按预期运行,/favicon.ico请求还在发送中)
我想我有几个关于正在发生的事情的后续问题:
为什么浏览器在我没有要求时对 /favicon.ico 发出更多请求(使用原始代码 serverSocket(0)?
既然我已经允许服务器监听多个套接字连接,为什么虚假连接请求 (/favicon.ico) 会消失?
谢谢,我也会阅读有关 syn cookie 的内容。
最佳答案
幸运的是,您的服务器正在按预期工作!
在调用 serversocket.accept() 之后尝试将此添加到您的代码中:print addr
。
这是怎么回事:
您开始循环,然后调用 accept()。您正在等待新连接到达端口 10016。您接收该连接,提供响应,然后关闭该连接。
然后你再次循环 - 从而准备好接受另一个套接字连接。这次是针对/favicon.ico。
addr
变量告诉您每个新的套接字连接(对于 foo.jpg 和 favicon.ico)都发生在不同的端口上 - 这就是 accept() 所做的。
因为您的代码一次只能处理一个连接,所以浏览器对 favicon.ico 的请求进入队列。也就是说,浏览器已请求连接到您的服务器以获取网站图标,但您的服务器尚未接受该连接。
现在,理论上,您不应该接受任何积压的连接。但是有一个问题!事实证明,如果您的内核启用了 TCP syn cookie,this parameter is ignored . (你怎么知道的?好吧,这对我用 C 完成了大量网络工作很有帮助;Python 抽象出了其中的许多细节。)
希望对您有所帮助!
关于python - 简单的 python 服务器问题。 socket.accept() 接受 input/favicon.ico 即使在我(应该)关闭套接字之后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19559671/
这个问题在这里已经有了答案: 9年前关闭。 Possible Duplicate: Favicon in subdirectory all subdomain 我的网站是一个大网站,里面有很多小项目。
我没有 favicon.ico,但我的浏览器总是发出请求。 是否可以阻止浏览器从我的网站发出对网站图标的请求?也许 HTML header 中有一些 META-TAG? 最佳答案 我首先要说的是,网页
我正在开发 mkdocs 网站。在这里我需要为我的网站添加网站图标。我尝试了这样的方法,但它不起作用。 我在 mkdocs.yaml 文件中添加了 site_favicon 并使用 readthedo
我想根据伟大的 favicon cheat sheet 创建多文件 favicon.ico . 我创建了 3 个 .png 文件,使用 OptiPNG 对其进行了优化,并收到了 1、2 和 3kb 大
是否可以使用 Font Awesome图标作为网站图标?您知道浏览器选项卡中网站标题旁边出现的小图标吗? 最佳答案 编辑:我建议您使用 http://gauger.io/fonticon 我创建了一
我已经在使用添加收藏夹图标的标准方式: 所以 favicon.gif 和 .ico 都应该驻留在 /graphics_card 但是,我发现 IE 8(或其他 IE)无法显示它, (更新:无论我按
我正在尝试将 favicon 添加到 Next.js 静态站点,但运气不佳。 我尝试使用 'next/document' 中的组件自定义文档 https://nextjs.org/docs/#cust
将收藏夹图标 (favicon) 文件命名为 favicon.ico 以外的名称是否有任何限制? 我确信它可以命名为任何东西,只要 favicon 标签指向正确的文件名即可。 例如: 上面的代码在
Favicon 出现在名为 fav.png 的 Assets 文件夹中,但未在浏览器中显示 我附上了 package.json 文件截图的截图链接、favicon 链接行截图和浏览器截图中显示的 fa
这个问题在这里已经有了答案: How to change Angular CLI favicon (32 个回答) 去年关闭。 我创建了一个新的 Angular 应用程序: ng new ... 我可
好的,所以现在我管理了如何在 webview 中处理网站图标。 但是如果我的 webview 没有收到 favicon 怎么办?我想提供一个名为 favicon-default.png 的可绘制对象!
除了 PNG 是一种更常见的图像格式这一事实之外,还有其他技术原因支持 favicon.png 与 favicon.ico 吗? 我支持现代浏览器,它们都支持 PNG 最喜欢的图标。 最佳答案 所有现
我开始学习 Angular 4 并尝试使用 Angilar4 CLI 重新制作一个站点。 现在我在 svg 中绘制的新网站图标有问题。我在 index.html 中写了这个 我删除了 favicon
如何摆脱 nginx 中的所有以下错误。我没有 favicon.ico 2012/03/11 17:13:25 [error] 959#0: *116 open() "/usr/local/nginx
我正在使用这个在线图标生成器为我的网站创建一个图标,工具输出提供了很多图标,而不仅仅是网站图标。我很好奇您认为哪些对网站是强制性的,哪些是不必要的: 最佳答案 您希望
我需要将 favicon.ico 放在网站的根目录之外。 我可以将它放在另一条路径中,否则它可能会惩罚某些旧浏览器吗? 最佳答案 如果你把 favicon.ico在另一个目录中并在 HTML 中声明它
如果我为favicon PNG指定不同的图像尺寸,例如: 这些文件中的每一个都会被获取吗? 最佳答案 引用http://www.jonathantneal.com/blog/under
我正在收集 RSS 标题,而不是网站名称,我想使用它的 favicon。这是法律允许的还是我必须征得每个站点的许可(在这种情况下,它只是无法扩展)? 示例:http://i53.tinypic.com
我正在尝试做一个非常简单的初步练习来设置一个创建网站图标的网站。 这是我正在使用的代码: 但它不起作用 - 有人可以帮忙吗?我已将文件 favicon.ico 保存在与 html 文件相同
我有一个使用自己的 tomcat 在本地运行的 Grails 应用程序,并且我刚刚将图标更改为新的。问题是我在任何浏览器中都看不到它。旧的网站图标出现,或者我根本没有网站图标,但新的网站图标却没有。我
我是一名优秀的程序员,十分优秀!