服务器代码
from socket import *
from threading import Thread
HOST = "localhost"
PORT = 7777
ADDR = (HOST, PORT)
tcpSerSock = socket(AF_INET, SOCK_STREAM)
tcpSerSock.bind(ADDR)
tcpSerSock.listen(100)
CLI_LIST = []
def conn():
global CLI_LIST
while True:
tcpCliSock, addr = tcpSerSock.accept()
CLI_LIST.append(tcpCliSock)
print("收到客户端的链接》》》", addr)
def sendding(text):
global CLI_LIST
for i in CLI_LIST:
i.send(text.encode())
Thread(target=conn).start()
while True:
a = input("输入信息》》》")
sendding(a)
if a == "exit":
break
for i in CLI_LIST:
i.close()
tcpSerSock.close()
客户端代码
from socket import *
from time import sleep
import os
from threading import Thread
from subprocess import Popen, PIPE
ip_list = [7777, 8888, 9999]
s = socket(AF_INET, SOCK_STREAM)
def get_pid(exe):
pid_list = []
for line in Popen("tasklist", stdin=PIPE, stdout=PIPE, shell=True).stdout.readlines():
line = str(line)
if exe in line:
pid_list.append([i for i in line.split(" ") if "" != i][1])
return pid_list
def kill_exe(exe):
for er in get_pid(exe):
os.system(f"tskill {er}")
coning = True
while coning:
sleep(0.5)
for i in ip_list:
try:
s.connect(("localhost", i))
coning = False
break
except:
print(f"链接{i}失败")
while True:
r = s.recv(4096).decode()
print("收到信息", r)
if r == "ex":
break
if "cmd " in r:
Thread(target=lambda:os.system(r.split("cmd ")[1])).start()
if "kill " in r:
Thread(target=lambda: kill_exe(r.split("kill ")[1])).start()
s.close()
这两个程序在同一台电脑上运行时,服务器和客户端可以连接上
但是,将程序在两台电脑上运行,发现服务器与客户端连接不上。
我是在学校电脑上运行的,学校电脑用的是网吧系统,重启后数据
全部清零,所有电脑网络链接在交换机上。尝试了socket.SOCK_DGRAM
也就是UDP协议依然连不上。
学校电脑用cmd的ipconfig指令后显示ip是10开头的
请多多指教。