因此,我一直在努力获取多个python文件进行通信,并且其中一个文件充当服务器。此处的目标是能够控制所有运行“客户端”脚本实例的PC,以连接到“服务器”脚本,从中我可以控制每台PC。
由于我目前正在单台PC上测试所有这些内容,因此我运行了服务器实例和客户端脚本。通常,我将启动“服务器”脚本的实例,而不是“客户端”脚本的实例。当“客户端”脚本首次与“服务器”脚本对话时,“服务器”脚本应显示属于运行“客户端”脚本的PC的IP,但不是。
这是我的服务器脚本:
import socket,subprocess,time
print ("This is the server speaking")
def Main():
host = "0.0.0.0"
port = 2346
s = socket.socket()
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((host,port))
s.listen(10)
conn,addr = s.accept()
print ("connection from: " + str(addr))
while True:
message=input(" -> ")
while message !='q':
conn.send(message.encode())
data=conn.recv(16834).decode()
print ("Received data from server: " + data)
message = input (" -> ")
conn.close()
time.sleep(5)
Main()
if __name__ == "__main__":
Main()
这是我的客户脚本:
import socket,time,os
import subprocess
def Main():
host = '127.0.0.1'
port = 2346
conn = socket.socket()
conn.connect((host,port))
while True:
#data = conn.recv(1024).decode()
data = conn.recv(16384).decode()
if not data:
break
print ("from connected user: " + str(data))
if data == "tasklist":
batcmd="tasklist"
result = subprocess.check_output(batcmd, shell=True)
data = str(result)
conn.send(data.encode())
elif "taskkill" in data:
pid = data[9:]
print (pid)
try:
batcmd="taskkill /IM %s /F" % (pid)
result = subprocess.check_output(batcmd, shell=True)
data = str(result)
conn.send(data.encode())
except:
pass
elif "ls" in data:
dirs = data[3:]
try:
x = os.listdir(dirs)
data = str(x)
conn.send(data.encode())
except:
data = "Dir. " +dirs+ " does not exist"
conn.send(data.encode())
data = str(data)
print ("sending: " + str(data))
conn.send(data.encode())
conn.close()
if __name__ == '__main__':
Main()
中间的“ if”和“ elif”语句实际上仅适用于我当前的命令。我相当确定问题一定出在服务器脚本中或客户端脚本的顶部。
这里的主要问题是,当我运行客户端脚本的实例时,服务器脚本的一侧没有任何内容。如果有人可以提供帮助,将不胜感激。
注意:我没有任何错误。