socket实现局域网S-C通信
服务器端代码
from socket import *
sk = socket(AF_INET, SOCK_STREAM)
c_Port = 9999
sk.connect(('127.0.0.1', c_Port)) # 绑定地址到套接字
print('(1)show me OS info:')
print('(2)show me Disk info:')
print('(3)exit:')
while True:
choice = input('input your choice:')
if not choice:
continue
sk.send(choice.encode())
s_reply = sk.recv(1024).decode()
if not s_reply:
print('通信结束')
break
print(s_reply)
sk.close()
所使用库:socket
客户端代码
from socket import *
from platform import *
from psutil import *
sk = socket(AF_INET, SOCK_STREAM)
s_Port = 9999
sk.bind(('127.0.0.1', s_Port)) # 绑定地址到套接字
sk.listen(5) # 开始监听
print('The server is ready to receive!')
while True:
conn, addr = sk.accept() # 被动接收客户端连接,返回通信对象和客户端地址
while True:
c_request = conn.recv(1024).decode('utf-8') # recv接收的最大数据量
if c_request == '1':
print('客户端请求OS info')
os_info = '操作系统及版本信息:{0}\n系统版本号:{1}\n系统名称:{2}\n系统位数:{3}\n计算机类型:{4}\n计算机名称:{5}\n处理器类型:{6}\n计算机相关信息:{7}\n'\
.format(platform(), version(), system(), str(architecture()),machine(), node(), processor(), str(uname()))
conn.send(os_info.encode())
elif c_request == '2':
print('客户端请求Disk info')
disk_num = len(disk_partitions())
disk_size = ''
GB = 1024*1024*1024
for i in range(disk_num):
disk_size += disk_partitions()[i].device.split(':')[0] + ':' + str(round(disk_usage(disk_partitions()[i].device).total / GB)) + 'GB\n'
disk_info = '磁盘数目:{0}\n磁盘大小:\n{1}'.format(disk_num, disk_size)
conn.send(disk_info.encode())
elif c_request == '3':
exit('通信结束')
else:
print('Error!')
conn.close()
sk.close()
所使用库:socket、platform(获取操作系统信息)、psutil(获取磁盘数目和大小)
运行说明
环境:python3
安装依赖:
pip install psutil
运行:
# 先运行server.py再运行client.py
> ./server.py
> ./client.py
运行截图
左边服务器端,右边客户端