【问题标题】:.recv function Socket programming TCP Server in Python.recv 函数 Socket 在 Python 中编程 TCP Server
【发布时间】:2017-02-27 10:05:22
【问题描述】:

我无法让我的非常基本和简单的 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 请求后立即崩溃。 任何和所有的帮助将不胜感激!

【问题讨论】:

  • "我也有错误"什么错误? “我的代码在收到 HTTP 请求后立即崩溃。”你知道它为什么会崩溃吗?

标签: python sockets http tcp decode


【解决方案1】:

您的代码存在许多问题,并且由于您没有说明您关心的具体问题,以下是我所看到的:

        connectionSocket.send(outputdata[i].encode())
        connectionSocket.send("\r\n".encode())

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

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

即使您尝试执行的操作中没有这些错误,您似乎也没有尝试发回有效的 http 响应。

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

【讨论】:

    猜你喜欢
    • 2018-12-18
    • 1970-01-01
    • 2015-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多