我在python上写了一个服务器:
import socket
server_socket = socket.socket()
server_socket.bind(('0.0.0.0', 8820))
server_socket.listen(1)
(client_socket, client_address) = server_socket.accept()
client_name = client_socket.recv(1024)
client_socket.send('Hello ' + client_name)
client_socket.close()
server_socket.close()
而且,我写了一个客户:
import socket
my_socket = socket.socket()
my_socket.connect(('127.0.0.1', 8820))
my_socket.send('Sami')
data = my_socket.recv(1024)
print('The server sent: ' + data)
my_socket.close()
但是当我运行代码时,在服务器中出现错误:"must be str, not bytes"
,在客户端我收到错误:"a bytes-like object is required, not 'str'"
。
答案 0 :(得分:2)
在发送之前和收到之后,使用encode/decode
在str
和bytes
之间进行转换:
my_socket.send('Sami'.encode('utf-8')) # encode string before sending
data = my_socket.recv(1024).decode('utf-8') # decode string after receiving
您可以将'utf-8'
替换为其他字符编码,具体取决于您的使用情况(例如,您可能会在Windows应用程序中看到'cp1252'
)。
对于服务器,不是解码字符串并在将'Hello '
放在前面后再次编码,您可以跳过一步并执行此操作:
client_name = client_socket.recv(1024)
client_socket.send(b'Hello ' + client_name)
b'Hello'
是一个文字bytes
对象,而不是像str
这样的'Hello'
对象。因此,b'Hello' + client_name
将直接bytes + bytes = bytes
{而不是client_name
转换为str
.decode
,添加'Hello'
以获得另一个str
然后使用bytes
转换回.encode
。
答案 1 :(得分:0)
您需要在发送字符串之前进行编码。例如:
mySocket.send("Hello".encode() + Client_name.encode())
或者:
mySocket.send(b"Hello" + Client_name.encode())