繁体   English   中英

使用python 2.7中的套接字连接到python服务器

[英]Connect to python server using sockets in python 2.7

我使用python -m SimpleHTTPServer在端口8000上创建了python服务器。

当我从网络浏览器访问此URL时,它显示以下内容

在此处输入图片说明

现在,我想使用python获取以上内容。 所以,为此,我所做的是

>>> import socket
>>> s = socket.socket(
...     socket.AF_INET, socket.SOCK_STREAM)
>>> s.connect(("localhost", 8000))
>>> s.recv(1024)

但是在s.recv(1024)什么也没有发生,它只是在那里等待并且什么也不打印。

所以,我的问题是如何使用python获取目录内容的输出。 也有人可以给我建议socket programming with python进行socket programming with python的教程。 我不太喜欢官方教程。

当我尝试使用python接收内容时,我还观察到了一件奇怪的事情,那时候什么都没发生,我无法从Web浏览器访问localhost:8000 ,但是一旦我杀死python程序,我就可以访问它。

可以说,通过python中的http获取内容的最简单方法是使用urllib2模块。 例如:

from urllib2 import urlopen
f = urlopen('http://localhost:8000')
for line in f:
    print line

这将打印出SimpleHTTPServer托管的文件。

但是在s.recv(1024)之后什么也没有发生,它只是在那里等待并且什么也不打印。

您只需打开一个套接字并等待数据,但这不是HTTP协议的工作方式。 如果要接收响应,则必须先发送请求(基本上,必须告诉服务器要列出哪个目录或要下载哪个文件)。 如果确实愿意,可以使用原始套接字发送请求以训练您的技能,但是强烈建议使用适当的库(请参阅Matthew Adams的回复和urllib2示例)。

当我尝试使用python接收内容时,我还观察到了一件奇怪的事情,那时候什么都没发生,我无法从Web浏览器访问localhost:8000,但是一旦我杀死python程序,我就可以访问它。

这是因为SimpleHTTServer是单线程的,并且不同时支持多个连接。 如果您要修复它,请在这里查看答案: BasicHTTPServer,SimpleHTTPServer和concurrency

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM