希望我能说清楚一点。我必须在python中创建一个服务器和客户端,相互发送HTTP GET请求。现在我创建了一个基本的服务器/客户端程序,现在我的目标是向服务器发送HTTP GET请求(来自我保存的html文件)和服务器以显示内容。 示例服务器将显示类似的内容 日期: 内容长度: 内容类型: 截至目前,当我运行客户端并键入GET / filename.html HTTP / 1.1 \ n \ r时,服务器不会显示。当我在Linux shell中输入那个确切的命令时,它会完美显示。如何在客户端和服务器中执行此操作。希望这是有道理的。这是我的客户端和服务器。
#CLIENT
import socket
import sys
host = socket.gethostname()
port = 12345 # The same port as used by the server
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
print(s.recv(1024))
inpt = input("type")
b = bytes(inpt, 'utf-8') #THIS SENDS BUT SERVER DOESDNT RECIEVE
s.sendall(b)
print("Message Sent")
#SERVERimport socket
import sys
host = '' # Symbolic name meaning all available interfaces
port = 12345 # Arbitrary non-privileged port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host, port))
s.listen(5)
while True:
c, addr = s.accept()
print("Connection accepted from " + repr(addr[1]))
c.send(b"Server Approved")
print(repr(addr[1]) + ":" + c.recv(1024).decode("UTF-8"))
c.close()
我想在我的服务器上键入这样的内容并显示其内容
GET / google.com HTTP / 1.1 \ r \ n
答案 0 :(得分:0)
错误消息非常简单,只需阅读它即可修复无效的代码。
Traceback (most recent call last):
...
print(repr(addr[1]) + ":" + c.recv(1024))
TypeError: must be str, not bytes
添加.decode("utf-8")
:
print(repr(addr[1]) + ":" + c.recv(1024).decode("utf-8"))
更明确的是使用str()
代替repr()
。您可以在此处了解这两者之间的差异:Difference between __str__ and __repr__ in Python。
print(str(addr[1]) + ":" + c.recv(1024).decode("utf-8"))