链接+循环 通信 服务端常驻
server端
import socket
phone=socket.socket()#买手机
phone.bind(('127.0.0.1',6666))#绑卡
phone.listen(5)#设置连接数一个连接加5个等待 缓存池
while 1:
conn,addr=phone.accept()
print(f'用户{addr}来了')
while 1:
try:
from_client_data=conn.recv(1024)
if from_client_data.decode('utf-8')=='Q':
print('正常断开')
break
print(f'来自客户端{addr}消息{from_client_data.decode("utf-8")}')
to_client_data=input('>>>>>>>')
conn.send(to_client_data.encode('utf-8'))
except Exception:
break
conn.close()
phone.close()
client端
# 自己的
import socket
phone=socket.socket()
phone.connect(('127.0.0.1',6666))
while 1:
to_server_data=input('>>>>>>q退出')
if not to_server_data:
print('不可以输入空')
continue
phone.send(to_server_data.encode('utf-8'))#因为不可以让他发空 所以放在判断下
if to_server_data.upper()=='Q':
break
from_server_data=phone.recv(1024)
print(f'来自客户端消息{from_server_data.decode("utf-8")}')
phone.close()
执行远端命令
server端
# 用到的模块
import subprocess
# import subprocess
# obj = subprocess.Popen('系统命令',
# shell=True,
# stdout=subprocess.PIPE,
# stderr=subprocess.PIPE,
# )
# print(obj.stdout.read().decode('gbk')) # 正确命令
# print(obj.stderr.read().decode('gbk')) # 错误命令
# 错误的是空字符串
import socket
import subprocess
phone = socket.socket()
phone.bind(('127.0.0.1',8848))
phone.listen(2)
while 1:
conn,addr = phone.accept() # 等待客户端链接我,阻塞状态中
print(f'链接来了: {conn,addr}')
while 1:
try:
from_client_data = conn.recv(1024) # 最多接受1024字节
if from_client_data.upper() == b'Q':
print('客户端正常退出聊天了')
break
obj = subprocess.Popen(from_client_data.decode('utf-8'),
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
)
result = obj.stdout.read() + obj.stderr.read()
conn.send(result)
except ConnectionResetError:
print('客户端链接中断了')
break
conn.close()
phone.close()
client端
# 用到的模块
import subprocess
# import subprocess
# obj = subprocess.Popen('系统命令',
# shell=True,
# stdout=subprocess.PIPE,
# stderr=subprocess.PIPE,
# )
# print(obj.stdout.read().decode('gbk')) # 正确命令
# print(obj.stderr.read().decode('gbk')) # 错误命令
# 错误的是空字符串
import socket
import subprocess
phone = socket.socket()
phone.bind(('127.0.0.1',8848))
phone.listen(2)
while 1:
conn,addr = phone.accept() # 等待客户端链接我,阻塞状态中
print(f'链接来了: {conn,addr}')
while 1:
try:
from_client_data = conn.recv(1024) # 最多接受1024字节
if from_client_data.upper() == b'Q':
print('客户端正常退出聊天了')
break
obj = subprocess.Popen(from_client_data.decode('utf-8'),
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
)
result = obj.stdout.read() + obj.stderr.read()
conn.send(result)
except ConnectionResetError:
print('客户端链接中断了')
break
conn.close()
phone.close()
利用udp建立通讯
server端
import socket
udp_server = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # 基于网络,udp协议的socket
udp_server.bind(('127.0.0.1', 9000))#绑卡
while 1:
from_client_data = udp_server.recvfrom(1024)#接收 前面消息 后面是ip端口
print(f'来自{from_client_data[1]}的消息:{from_client_data[0].decode("utf-8")}')
to_client_data = input('>>>').strip()
udp_server.sendto(to_client_data.encode('utf-8'),from_client_data[1])
client端
import socket
udp_client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # 基于网络,udp协议的socket
while 1:
to_server_data = input('>>>').strip()
udp_client.sendto(to_server_data.encode('utf-8'),('127.0.0.1', 9000))
from_server_data = udp_client.recvfrom(1024)#发送端 端口不知道
print(f'来自{from_server_data[1]}的消息:{from_server_data[0].decode("utf-8")}')