簡體   English   中英

.recv函數套接字編程Python中的TCP Server

[英].recv function Socket programming TCP Server in Python

我在讓我非常基本和簡單的TCP Server正確處理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請求后立即崩潰。 任何和所有幫助將不勝感激!

您的代碼有很多問題,由於您沒有說明要關注的特定問題,因此,我看到的是:

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

在您發送回客戶端的每個字符之后,似乎都會發送換行符。

另外,它不會處理客戶端斷開連接的問題,因為您正在發送回無效數據。

即使您嘗試執行的操作中沒有這些錯誤,您似乎也沒有嘗試發送回有效的http響應。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM