我用Python创建了一个服务器。代码是:
from socket import *
serverSocket = socket(AF_INET, SOCK_STREAM)
localHost = # my address
port = 5369
serverSocket.bind( (localHost, port) )
serverSocket.listen(1)
while True:
print ("Ready to serve.....")
connectionSocket, addr = serverSocket.accept()
try:
message = connectionSocket.recv(1024)
filename = message.split()[1]
f = open(filename[1:])
outputdata = f.read()
for i in range(0, len(outputdata) ):
connectionSocket.send(outputdata[i])
connectionSocket.close()
except IOError:
connectionSocket.send('404 Not Found')
connectionSocket.close()
serverSocket.close()
我执行了该文件。它给出了一个错误:
Traceback (most recent call last):
File:"D;\.....\server.py", line 25, in <module>
connectionSocket.send(outputdata[i])
TypeError: 'str' does not support the buffer interface.
在Stackoverflow上扫描类似查询后,我发现从Python 3.0开始,数据需要转换为字节。如果是这种情况,那么我应该在何处以及如何更改/解析数据?
答案 0 :(得分:2)
您在文本模式中打开了文件,这意味着内容被解码为unicode字符串。
写入套接字时,需要编写bytes
。您可以通过以二进制模式打开文件来轻松获取文件中的字节:
with open(filename[1:], 'rb') as f:
connectionSocket.send(f.read())
请注意,我一次性将数据发送到套接字; ;这里不需要逐字节发送数据。
答案 1 :(得分:0)
方法send()接受binnary格式的参数。因此,尝试使用方法编码('utf-8')将一些数据发送到服务器:
connectionSocket.send(outputdata[i].encode('utf-8'))
并使用decode('utf-8')从方法recv()返回的数据中获取字符串。