类型错误:需要类似字节的对象,而不是在我的服务器中'str'



创建服务器和clint时,无法向它们发送命令这个代码服务器连接clint

:-

import socket
s = socket.socket()
h="192.168.1.2"
p=665
s.bind((h, p))
print ("YOUR SESSION HAS BEEN CREATED IN PORT : ", p)
s.listen(1)
v, addr = s.accept()
print("SUCCESS CONECTION ...", addr)
mssge = input ("==> ")
while mssge != 'e':
v.send(mssge)
data = v.recv(1024)
print (data)
mssge = input ("==> ")
s.close()

然后我去deffrant终端和rin-clint代码这个代码clint:-

import subprocess
import socket
s= socket.socket()
h="192.168.1.2"
p=665
s.connect((h, p))
while True:
data=s.recv(1024)
if not data:
break
co = subprocess.Popen(data, shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
ct = co.stdout.read() + co.stderr.read()
cf = str(ct)
s.send(cf)
s.close()

连接后,当我纠正任何建议时,我有问题这个错误:-

YOUR SESSION HAS BEEN CREATED IN PORT :  665
SUCCESS CONECTION ... ('192.168.1.2', 49508)
==> ls
Traceback (most recent call last):
File "/root/i.py", line 13, in <module>
v.send(mssge)
TypeError: a bytes-like object is required, not 'str' 

请帮助

套接字编程总是以字节(八个0和1的集合(传输数据发送时,发送的数据必须为字节格式。

arr = bytes(mssg, 'utf-8')

arr = bytes(mssg, 'ascii')

可以将您的消息转换为字节,然后发送此消息。

在接收端,使用将这些字节转换回str对象

mssg = recieved.decode("utf-8")

实际上,v.send()需要一个类似对象的字节,而不是str,因此input((的值是str,所以它不能是

v.send(b”msg” + b” “ * (128 - len(b”msg”)))

以便如果由于所有消息len都是64个字母而可以接收多个消息

用于接收:v.recv(64)

你也可以创建一个函数,比如:

def send(msg):
sendMsg = msg.encode()
sendMsg += b” “ * (64 - len(sendMsg))
v.send(msg)

相关内容

最新更新