问题描述
我正在尝试使用python中的套接字模块连接到服务器。但是,我收到一条错误消息,如下所示。
var rand = new Random();
var rndNumber = new decimal(rand.NextDouble());
rndNumber = rndNumber * 6 - 3;
这是我的代码:
TypeError: a bytes-like object is required,not 'str'
是什么导致此TypeError?我应该怎么做才能解决这个问题? 我也欢迎任何建议来改进我的python套接字代码编写。
解决方法
轻松地,只需将字符串转换为按字节的对象
string = "example string"
byte_wise_string = string.encode("utf-8")
希望我能帮忙
礼物
,https://docs.python.org/3/library/socket.html?highlight=socket#socket.socket.send
您想要
-
encode
从字符串到字节对象,然后发送:client_socket.send(command.encode())
- 和
decode
返回字符串,当您串联打印时:print(data.decode() + "\n")
此错误是因为python希望通过套接字发送字节而不是字符串。
因此,您必须在发送字符串之前将字符串转换为字节。您可以使用encode()
将字符串转换为字节,并使用decode()
将接收的字节转换为字符串。
我已经更新了您的代码,请参考以下内容,该方法应该可以正常工作。
import socket
HOST = '0.0.0.0'
PORT = 12345
server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
server_socket.bind((HOST,PORT))
server_socket.listen(5)
print("\n[*] Listening on port " +str(PORT)+ ",waiting for connexions. ")
client_socket,(client_ip,client_port) = server_socket.accept()
print("[*] Client " +client_ip+ " connected \n")
while True:
try:
command = input(client_ip+ ">")
if(len(command.split()) != 0):
client_socket.send(command.encode('utf-8')) #Encoding required here
else:
continue
except(EOFError):
print("Invalid input,type 'help' to get a list of implented commands. \n")
continue
if(command == "quit"):
break
data = client_socket.recv(1024)
print(data.decode('utf-8') + "\n") #Decoding required here
client_socket.close()