TypeError:在控制台中输入命令时,需要一个类似字节的对象,而不是“ str”

问题描述

我正在尝试使用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()

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...