加上循环的套接字通信
服务端应该满足的特性:
一直对外服务
并发地提供服务
import socket
phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 在bind之前添加
phone.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) # 重用ip和端口
phone.bind('127.0.0.1', 8080)
phone.listen(5)
print(f'starting %s:%s'%('127.0.0.1', 8080))
# 链接循环
while True:
conn, client_addr = phone.accept()
print(client_addr)
# 通信循环
while True:
try:
data = conn.recv(1024)
# 针对linux系统
if len(data) == 0:
break
print('收到客户端数据:', data.decode('utd-8'))
conn.send(data.upper())
# 针对Windows系统
except Exception:
break
conn.close()
phone.close() # 关机
客户端:
import socket
phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
phone.connect(('127.0.0.1', 8080))
while True:
msg = input('>>>:').strip()
phone.send(msg.encode('utd-8'))
data = phone.recv(1024)
print('服务端返回的数据:', data.decode('utd-8'))
phone.close()
5.3 远程连接服务端并执行指令
服务端:
import socket
import subprocess
phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
phone.setsocketopt(socket.SOL_SOCKET, socket.SO_REUSEADDR,1)
phone.bind(('127.0.0.1', 8080))
phone.listen(5)
print('starting %s:%s'%('127.0.0.1', 8080))
while True:
conn, client_addr = phone.accept()
print(client_addr)
while True:
try:
cmd = coon.recv(1024)
if len(cmd) == 0:
break
obj = subprocess.Popen(cmd.decode('utf-8'),
shell = True,
stdout = subprocess.PIPE,
stderr = subprocess.PIPE)
res1 = obj.stdout.read()
res2 = obj.stderr.read() 郑州祛胎记医院哪家好 http://www.zykdtj.com/
conn.send(res1 if len(res2) == 0 else res2)
except Exception:
break
conn.close()
phone.close()
客户端:
phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
phone.connect(('127.0.0.1', 8080))
while True:
cmd = input('[root@localhost]# ').strip()
phone.send(cmd.encode('utf-8'))
data = phone.recv(1024)
print(data.decode('gbk))
phone.close()
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69979119/viewspace-2711738/ ,如需转载,请注明出处,否则将追究法律责任。