當我創建一個服務器和一個 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()
我去defrant終端和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'
請幫忙
uj5u.com熱心網友回復:
Socket 編程總是以位元組為單位傳輸資料(一組 8 個 0 和 1) 發送時,發送的資料必須是位元組格式。
arr = bytes(mssg, 'utf-8')
或者
arr = bytes(mssg, 'ascii')
可以將您的訊息轉換為位元組,然后發送。
在接收端,將這些位元組轉換回 str 物件
mssg = recieved.decode("utf-8")
uj5u.com熱心網友回復:
實際上,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)
uj5u.com熱心網友回復:
您必須將 IP 地址宣告為位元組字串,而不是str. 這是通過b在字串之前添加 a 來完成的:
s = socket.socket()
h = b"192.168.1.2"
p = 665
s.connect((h, p))
您還可以使用以下str.encode()方法:
s = socket.socket()
h = "192.168.1.2"
p = 665
s.connect((str.encode(h), p))
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/462600.html
