.recv函数套接字编程Python中的TCP服务器

时间:2016-10-18 08:17:35

标签: python sockets http tcp decode

我无法让我的基本和简单的TCP服务器正确处理http请求。这就是我到目前为止所拥有的

from socket import *
import sys 
serverSocket = socket(AF_INET, SOCK_STREAM)


serverSocket.bind(('', 4567))
serverSocket.listen(1)

while True:
    print('Ready to serve...')
    connectionSocket, addr =  serverSocket.accept()
    print("connected from: ", addr)
    try:
        message = connectionSocket.recv(1024)
        filename = message.split()[1]                 
        f = open(filename[1:])         
        outputdata = f.read()
        connectionSocket.send("HTTP/1.1 200 OK\r\n") 
        for i in range(0, len(outputdata)):           
            connectionSocket.send(outputdata[i].encode())
            connectionSocket.send("\r\n".encode())
        connectionSocket.close()
    except IOError:
        connectionSocket.send("file not found")
        serverSocket.close()
sys.exit()

错误来自open语句。我不完全理解这行代码的返回值是如何组织的。

message = connectionSocket.recv(1024)

我知道返回值以字节为单位但是当我尝试使用函数将其转换为像decode()这样的字符串时,我也会遇到错误

我的.py文件和html文件位于我本地计算机上的同一目录中,我测试的方式是运行它并打开浏览器并输入

http://127.0.0.1:4567/helloworld.html

我的代码在收到HTTP请求后会立即崩溃。 任何和所有的帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

您的代码存在许多问题,因为您没有说明您关注的具体问题,所以我看到的是:

{{1}}

这似乎会在您发送回客户端的每个字符后发送换行符。

此外,它不会处理客户端断开连接,因为您要发回无效数据。

即使您尝试做的事情中没有这些错误,您似乎也没有尝试发回有效的http响应。

https://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html