python - 遇到有关 python 编写的简单服务器的问题

标签 python

这是一个简单的服务器。当你打开浏览器输入服务器地址时,它会响应一个状态码和请求的 html 的内容。但是当我添加这句话“connectionSocket.send('HTTP/1.1 200 OK')”时,没有任何返回。当我删除它时,html 返回了。另一个问题是当我通过网络浏览器发送请求时,有两个连接发送到服务器,一个显示它想找到一个名为 favicon.ico 的文件,但当然它是一个 IOError 因为没有这样的文件我服务器的根目录。附上代码,感谢您的帮助。


#import socket module

from socket import *
serverSocket = socket(AF_INET,SOCK_STREAM)
#prepare a server socket

serverSocket.bind(('192.168.0.101', 8765))
serverSocket.listen(1)

while True:

    #Establish the connection

    print 'Ready to serve...'
    connectionSocket,addr =  serverSocket.accept()
    print 'connected from',addr
    try:
        message = connectionSocket.recv(1024)
        filename = message.split()[1]
        print filename
        f = open(filename[1:])
        outputdata = f.read()

        #Send one HTTP header line into socket

        #connectionSocket.send('HTTP/1.1 200 OK')

        #Send the content of the requested file to the client

        for i in range(0,len(outputdata)):
            connectionSocket.send(outputdata[i])
        connectionSocket.close()
    except IOError:
        print 'IOError'

        #Send response message for file not found

        connectionSocket.send('file not found')

        #Close Client socket

        connectionSocket.close()
serverSocket.close()

最佳答案

您需要在 HTTP header 的末尾添加换行符 (\r\n\r\n):

connectionSocket.send('HTTP/1.1 200 OK\r\n\r\n')

此外,您可能应该使用更高级别的库来编写您的 HTTP 服务器...

关于python - 遇到有关 python 编写的简单服务器的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3840296/

相关文章:

python - 如何在 django python 中用 json 替换 simplejson?

python - 在 python 中用空字符串替换捕获的组

python - 如何使用 Py_AddPendingCall

python - Django:ModelMultipleChoiceField 不选择初始选择

python - 在不安装 PyPI 的情况下获取包的要求?

python - 如何在Python中将文本文件解析为字典,其中一行键后跟两行值

Python:如何拆分数据框中的字符串列?

python xpath相对路径在<br>之前获取<p>

python - 为什么 numpy.ndarray.T 比 numpy.transpose(numpy.ndarray) 快得多?

Python 条件 if/else 语法无效