如何解决Python中的套接字编程+ HTTP1.1
该任务正在构建两个文件client.py和server.py。我能够将客户端连接到服务器。我遇到的问题是当我尝试发送诸如client.send(“ bGET /suc.txt HTTP / 1.1 \ r \ nHost:127.0.0.1 \ r \ n \ r \ n”)之类的get请求时,我不知道如何从服务器端将文件suc.txt返回给客户端。场景是服务器的客户端请求文件,服务器返回的是响应标头和请求的文件。
到目前为止我写的是什么
客户:
import socket
target_host = "127.0.0.1"
target_port = 5050
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.connect((target_host,target_port))
client.send("bGET /suc.txt HTTP/1.1\r\nHost:127.0.0.1\r\n\r\n")
response = client.recv(1024)
print(response.decode())
服务器:
import socket
import threading
import urllib.request
HEADER = 64
PORT = 5050
HOST = socket.gethostbyname(socket.gethostname())
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.bind((HOST,PORT))
def handleClient(conn,addr):
print (f"[NEW CONNECTION {addr} connected. ")
connected = True
while connected:
conn.send()
def start():
server.listen()
while True:
conn,addr = server.accept()
thread = threading.Thread(target=handleClient,args=(conn,addr))
thread.start()
print(f"[ACTIVE CONNECTIONS] {threading.activeCount()} ")
print ("server is starting...")
start()
解决方法
client.send("bGET /suc.txt HTTP/1.1\r\nHost:127.0.0.1\r\n\r\n")
"b..."
应该是b"..."
,也就是说,您要指定字节序列,而不是以b
作为第一个字符的字符串。
我不怎么从服务器端将文件suc.txt返回给客户端
您基本上可以广泛地询问如何读取HTTP请求,从中提取信息,创建适当的响应并将其发送。到目前为止,您所做的所有工作都是创建一个侦听器套接字,因此您离最终目标还很遥远。
有两种主要的解决方法:一种简单的方法是使用http.server之类的库来为您实现HTTP的复杂性。该文档包含有关如何执行此操作的实际示例,并且在Internet上还有许多其他示例。
更难的选择是研究实际的HTTP standard并根据此标准自己实现所有功能。期望有人在这里解释复杂的标准并描述如何执行它是一个太宽泛的问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。