Python错误:打印(数据+“\ n”)类型错误:尝试通过网络套接字发送命令时无法将str连接到字节[重复]

Posted

技术标签:

【中文标题】Python错误:打印(数据+“\\ n”)类型错误:尝试通过网络套接字发送命令时无法将str连接到字节[重复]【英文标题】:Python error: print(data + "\n") TypeError: can't concat str to bytes when trying to send command through network socket [duplicate]Python错误:打印(数据+“\ n”)类型错误:尝试通过网络套接字发送命令时无法将str连接到字节[重复] 【发布时间】:2021-01-15 16:33:27 【问题描述】:

您好,我正在尝试通过 python 套接字将命令从一台计算机发送到另一台计算机。我能够成功连接到计算机并查看用户的 IP 地址,但是当我尝试从主机发送命令时,它给了我这个错误 client_socket.send(command) TypeError:需要一个类似字节的对象,而不是'str'

这是我所有的代码:

import socket
import subprocess, os

print("#####################")
print("# Python Port Maker #")
print("#                   #")
print("#'To Go Boldy Where'#")
print("#  No Other Python  #")
print("#      Has Gone     #")
print("#      By Riley     #")
print("#####################")

host = input("What host would you like to use? ")
port = int(input("What port would you like to use? "))
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 connections.")

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(b'command')
    else:
        continue
except(EOFError):
        print("ERROR INPUT NOT FOUND. Please type 'help' to get a list of commands.\n")
        continue

if(command == "quit"):
    break

data = client_socket.recv(1024)
print(data + "\n")

client_socket.close()

这是它给我的错误:

print(data + "\n")
TypeError: can't concat str to bytes

有什么帮助吗?谢谢

【问题讨论】:

这能回答你的问题吗? Can't concat bytes to str。我所做的只是搜索错误消息,这给了我很多类似的问题。此外,您应该提取了minimal reproducible example。这样做,您会发现这与使用套接字无关。作为这里的新用户,也请带上tour并阅读How to Ask。 【参考方案1】:

不确定这是否可行,但您可以尝试以下方法:

client_socket.send(command.encode('utf-8'))

这样您的命令就会以字节而不是字符串的形式发送。

【讨论】:

当我尝试得到 TypeError: can't concat str to bytes 然后名称 utf 也没有定义【参考方案2】:

这里的client_socket 是socket object 并以bytes 作为参数。

由于command 是一个字符串,请尝试client_socket.send(b'command') 将其用作字节对象。

编辑

client_socket.recv(1024) 返回bytes 对象,所以data 变量是字节对象。

尝试print(data) 或转换字节对象字符串print(data.decode('utf-8') + '\n')

这里使用 utf-8 是因为它是一种非常常见的编码,但您需要使用您的数据实际所在的编码。

如果它不起作用,试试这个answer。

【讨论】:

现在我的代码出现了另一个错误:print(data + "\n") TypeError: can't concat str to bytes 这也是'data' var data = client_socket.recv(1024) print(data + "\n") @Riley 检查编辑后的答案。 我想我需要编码字节并将它们解码为 str 或编码 str 并将它们解码为字节

以上是关于Python错误:打印(数据+“\ n”)类型错误:尝试通过网络套接字发送命令时无法将str连接到字节[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python:打印 Pandas 数据框返回 numpy.ndarray 属性错误

python 语法错误与异常

双数据类型的解释错误

打印捕获的异常类型而不打印错误描述

基本数据类型

希望我的代码引发特定类型或错误,但打印原始错误