更新内容:

1.增加内存信息获取

2.增加电池信息获取

3.增加磁盘信息获取

4.重新布局窗体

5.增加窗体名称

6.增加连接成功之前,不可按压

效果图:

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
>>文件: ps_client.py
>>作者: liu yang
>>邮箱: liuyang0001@outlook.com
>>博客: www.cnblogs.com/liu66blog ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' #!/usr/bin/env python
# -*- coding: utf-8 -*- import sys, os
from socket import *
from tkinter import * class Ps_client():
def __init__(self):
self.ip=None
self.port=None
self.data=None
# 创建ipv4套接字
self.client=socket(AF_INET,SOCK_STREAM)
self.root=Tk()
self.root.geometry('300x300+250+250') # 创建IP输入框
var_ip = StringVar()
var_ip.set('localhost')
self.et_ip=Entry(self.root,width=30,textvariable=var_ip)
self.et_ip.pack() # 创建IP输入框的Label
self.ip_lable=Label(self.root,text="ip地址") # 创建端口号输入框
var_port = StringVar()
var_port.set(66)
self.et_port=Entry(self.root,width=30,textvariable=var_port)
# 创建端口号Label
self.port_lable=Label(self.root,text="端口号") # 创建连接按钮,注意!!!command=后面的连接的不加括号
self.connButton=Button(self.root,text="连接",command=self.connect)
# 创建获取cpu按钮
self.getCpuButton=Button(self.root,text="CPU",state='disable',command=self.get_cpu_info)
# 创建获取memory按钮
self.getMemoryButton=Button(self.root,text="内存",state='disable',command=self.get_memory_info)
# 创建获取battery按钮
self.getBatteryButton = Button(self.root, text="电池", state='disable', command=self.get_battery_info)
# 创建获取disk按钮
self.getDiskButton=Button(self.root,text="磁盘",state='disable',command=self.get_disk_info)
# 创建断开按钮
self.exitButton=Button(self.root,text="退出",state='disable',command=self.exit_connect) self.txtBox=Text(self.root,width=40,height=10) def main(self):
self.root.title('博客园:liu66')
self.et_ip.place(x=10,y=20)
self.et_port.place(x=10,y=50)
self.ip_lable.place(x=245,y=20)
self.port_lable.place(x=245,y=50) self.connButton.place(x=10,y=80)
self.getCpuButton.place(x=70,y=80)
self.getMemoryButton.place(x=130,y=80)
self.getBatteryButton.place(x=190,y=80)
self.getDiskButton.place(x=250,y=80)
self.txtBox.place(x=5,y=120)
self.exitButton.place(x=255,y=260)
# self.txtBox.insert(INSERT,'在这里显示内容')
self.root.mainloop() def connect(self):
self.ip=self.et_ip.get()
try:
self.port=int(self.et_port.get())
except ValueError:
self.txtBox.delete(0.0,END)
self.txtBox.insert(0.0,"请输入合法的ip和端口...")
else:
print("ip:%s"%self.ip)
print("port:%s"%self.port)
self.txtBox.delete(0.0,END)
self.txtBox.insert(0.0,"正在链接中...")
try:
self.client.connect((self.ip,self.port))
except OSError:
print("向一个无法连接的网络尝试了一个套接字操作")
self.txtBox.delete(0.0, END)
self.txtBox.insert(0.0, "%s:%d连接失败..."%(self.ip,self.port))
else:
print("%s连接成功..."%self.ip)
self.txtBox.delete(0.0, END)
self.txtBox.insert(0.0, "%s:%d连接成功..."%(self.ip,self.port))
# 连接成功则将其他按钮变为可按状态
self.exitButton['state']='active'
self.getCpuButton['state']='active'
self.getMemoryButton['state']='active'
self.getBatteryButton['state']='active'
self.getDiskButton['state']='active' def get_cpu_info(self):
self.data='cpu'
self.client.send(self.data.encode('utf-8'))
# 将接受的数据装换成浮点数据
cpu_used=float(self.client.recv(1024).decode('utf-8'))
print('CPU使用率:%0.2f'%cpu_used+'%')
self.txtBox.delete(0.0, END)
# 字符串前加上r为防转义
self.txtBox.insert(0.0, "当前的cpu使用率:%0.2f"%cpu_used+r"%") def get_memory_info(self):
self.data='memory'
self.client.send(self.data.encode('utf-8'))
memory_message=self.client.recv(1024).decode('utf-8')
print(memory_message)
# 清除显示
self.txtBox.delete(0.0, END)
# 显示内存信息
self.txtBox.insert(0.0, "%s" %memory_message) def get_battery_info(self):
self.data='battery'
self.client.send(self.data.encode('utf-8'))
battery_message=self.client.recv(1024).decode('utf-8')
print(battery_message)
# 清除显示
self.txtBox.delete(0.0, END)
# 显示内存信息
self.txtBox.insert(0.0, "%s" %battery_message) def get_disk_info(self):
self.data='disk'
self.client.send(self.data.encode('utf-8'))
disk_message=self.client.recv(1024).decode('utf-8')
print(disk_message)
# 清除显示
self.txtBox.delete(0.0, END)
# 显示内存信息
self.txtBox.insert(0.0, "%s" %disk_message) def exit_connect(self):
self.client.close()
self.txtBox.delete(0.0, END)
self.txtBox.insert(0.0, "当前连接已断开...")
print("当前连接已断开...")
self.exitButton['state'] = 'disable'
self.getCpuButton['state'] = 'disable'
self.getMemoryButton['state'] = 'disable'
# 关闭当前窗口
self.root.destroy() if __name__ == '__main__':
Ps=Ps_client()
Ps.main()

[Python Study Notes]CS架构远程访问获取信息--Client端v2.0的更多相关文章

  1. [Python Study Notes]CS架构远程访问获取信息--SERVER端v2.0

    更新内容: 1.增加内存信息获取 2.增加电池信息获取 3.增加磁盘信息获取 4.重新布局窗体 5.增加窗体名称 6.增加连接成功之前,不可按压 ''''''''''''''''''''''''''' ...

  2. [Python Study Notes]CS架构远程访问获取信息--Client端v1.0

    更新内容: 1.添加entry栏默认ip和port口 2.修正退出功能 3.添加退出自动关闭窗口功能 4.优化cpu显示为固定保留两位小数 '''''''''''''''''''''''''''''' ...

  3. [Python Study Notes]CS架构远程访问获取信息--Client端

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...

  4. [Python Study Notes]CS架构远程访问获取信息--SERVER端

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...

  5. Eureka系列(三)获取服务Client端具体实现

    获取服务Client 端流程   我们先看下面这张图片,这张图片简单描述了下我们Client是如何获取到Server已续约实例信息的流程:  从图片中我们可以知晓大致流程就是Client会自己开启一个 ...

  6. [Python Study Notes]进程信息(丁丁软件监控进程,http-post)

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...

  7. [Python Study Notes]cpu信息

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...

  8. [Python Study Notes]电池信息

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...

  9. [Python Study Notes]内存信息

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...

随机推荐

  1. python原始字符串

    str1='let's go' File "<input>", line 1 str1='let's go' ^ SyntaxError: invalid syntax ...

  2. 【学习笔记】js下拉刷新、上拉加载 mescroll框架的使用

    写在前边: 工作需要,使用ajax在原来的列表下边使用ajax请求后台数据,拼接在列表最下边,在github转了好久,发现了一个bug极多的js刷新插件,尝试了一个下午,就在快放弃的时候,发现下边有留 ...

  3. SQL用了Union后的排序问题

    最近使用SQL语句进行UNION查询,惊奇的发现:SQL没问题,UNION查询也没问题,都可以得到想要的结果,可是在对结果进行排序的时候,却出问题了. 1.UNION查询没问题 SELECT `id` ...

  4. PHP UEditor富文本编辑器 显示 后端配置项没有正常加载,上传插件不能正常使用

    UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码... 问题描述 我的编辑器在本地测试的时候没问 ...

  5. Tomcat 源码分析(二)——Request处理全过程

    前一篇博客,我总结了Tomcat对于生命周期组件的管理.在了解了容器的启动之后,我们开始剖析它的内部运行机制.今天我们来分析一下Tomcat如何处理Request.Socket作为网络通信的基础也是R ...

  6. 有经验JAVA程序员如何提升自己?

    作为一个具有一到五年开发经验程序员,需要学习内容很多: JVM/分布式/高并发/性能优化/Spring MVC/Spring Boot/Spring Cloud/MyBatis/Netty源码分析等等 ...

  7. Asp.net mvc 中View的呈现(一)

    [toc] 我们知道针对客户端的请求,最终都会转换为对 Controller 中的一个 Action 方法的调用,指定的 Action 方法会返回一个 ActionResult 类型的实例来响应该请求 ...

  8. 想要学习jQuery却不知从何开始?本文为你精选5个例子帮你快速成为jQuery大师

    本文阅读对象:WEB前端开发初学者.jQuery初学者.JavaScript初学者 本文目的:jQuery真正入门.快速入门.快速搞清楚jQuery是什么,同时为你的jQuery大师之路开启第一道门. ...

  9. Redis的事务功能详解

    Redis的事务功能详解 MULTI.EXEC.DISCARD和WATCH命令是Redis事务功能的基础.Redis事务允许在一次单独的步骤中执行一组命令,并且可以保证如下两个重要事项: >Re ...

  10. .net 和 core2.0 数据库连接字符串

    Asp.net Core 数据库离线文件的连接(引自“张不水”兄的研究成果.) 一.绝对路径: "DefaultConnection": "Data Source=(lo ...