exe1:client
from socket import *
# 1. 使用面向对象编程的方式定义客户端类Client
class Client:
def __init__(self, ip, port):
self.socket = socket()
self.socket.connect((ip, port))
def run(self):
self.socket.send('童童,你好!我是小派。'.encode())
res = self.socket.recv(1024).decode()
print('客户端收到的消息:', res)
self.socket.close()
# 2. 创建客户端对象client,传入域名:l345.61it.cn和端口号:10021
client = Client('l345.61it.cn', 10021)
# 3. 调用run()方法
client.run()
exe2:client
from socket import *
class Client:
def __init__(self, ip, port):
self.socket = socket()
self.socket.connect((ip, port))
def run(self):
self.socket.send("童童,你好!我是小派。".encode())
res = self.socket.recv(1024).decode()
print('客户端收到的消息:', res)
self.socket.close()
client = Client('localhost', 10021)
client.run()
exe2:server
from socket import *
# 1. 使用面向对象编程的方式定义服务端类Server
class Server:
def __init__(self, ip, port):
self.socket = socket()
self.socket.bind((ip, port))
self.socket.listen()
def run(self):
print('等待客户端连接...')
connSocket, addr = self.socket.accept()
req = connSocket.recv(1024).decode()
print('接收到客户端的消息:', req)
connSocket.send('你好,我是服务端。我收到你的消息了!'.encode())
connSocket.close()
self.socket.close()
# 2. 创建服务端对象server,传入ip:0.0.0.0和端口号:10021
server = Server('0.0.0.0', 10021)
# 3. 调用run方法,启动服务端
server.run()
05:client
from socket import *
class Client:
def __init__(self, ip, port):
self.socket = socket()
self.socket.connect((ip, port))
def run(self):
while True:
content = input('请输入发送的内容:')
if not content:
continue
self.socket.send(content.encode())
res = self.socket.recv(1024).decode()
print('客户端收到的消息:', res)
self.socket.close()
client = Client('localhost', 10021)
client.run()
03:client
from socket import *
class Client:
def __init__(self, ip, port):
self.socket = socket()
self.socket.connect((ip, port))
def run(self):
# 1. 添加无限循环
while True:
# 2. 获取输入消息内容
content = input("请输入消息内容:")
# 3. 如果内容为空,就跳过当前循环并重新输入
if not content:
continue
# 4. 发送输入的内容,并给下面3行代码添加一个缩进
self.socket.send(content.encode())
res = self.socket.recv(1024).decode()
print('客户端收到的消息:', res)
self.socket.close()
client = Client('l345.61it.cn', 10021)
client.run()
04:client
from socket import *
class Client:
def __init__(self, ip, port):
self.socket = socket()
self.socket.connect((ip, port))
def run(self):
while True:
content = input('请输入发送的内容:')
if not content:
continue
self.socket.send(content.encode())
res = self.socket.recv(1024).decode()
print('客户端收到的消息:', res)
self.socket.close()
client = Client('localhost', 10021)
client.run()
04:server
import socket
class Server:
def __init__(self,ip,port):
self.socket = socket.socket()
self.socket.bind((ip, port))
self.socket.listen()
def run(self):
print('等待链接。。。')
connSocket, addr = self.socket.accept()
# 1. 添加无限循环
while True:
# 2. 给下面3行代码添加一个缩进
req = connSocket.recv(1024).decode()
print('服务端收到的消息:', req)
connSocket.send('你好,我是服务端。我收到你的消息了!'.encode())
connSocket.close()
self.socket.close()
server = Server('0.0.0.0', 10021)
server.run()
05:client
from socket import *
class Client:
def __init__(self, ip, port):
self.socket = socket()
self.socket.connect((ip, port))
def run(self):
while True:
content = input('请输入发送的内容:')
if not content:
continue
self.socket.send(content.encode())
res = self.socket.recv(1024).decode()
print('客户端收到的消息:', res)
self.socket.close()
client = Client('localhost', 10021)
client.run()
05:server
import socket
class Server:
def __init__(self,ip,port):
self.socket = socket.socket()
self.socket.bind((ip, port))
self.socket.listen()
def run(self):
print('等待链接。。。')
connSocket, addr = self.socket.accept()
while True:
req = connSocket.recv(1024).decode()
# 1.如果收到的消息为空,则结束循环,关闭套接字
if not req:
break
print('服务端收到的消息:', req)
connSocket.send('你好,我是服务端。我收到你的消息了!'.encode())
connSocket.close()
self.socket.close()
server = Server('0.0.0.0', 10021)
server.run()
06:client
from socket import *
class Client:
def __init__(self, ip, port):
self.socket = socket()
self.socket.connect((ip, port))
def run(self):
while True:
content = input('请输入发送的内容:')
if not content:
continue
self.socket.send(content.encode())
res = self.socket.recv(1024).decode()
print('客户端收到的消息:', res)
self.socket.close()
client = Client('localhost', 10021)
client.run()
06:server
import socket
class Server:
def __init__(self, ip, port):
self.socket = socket.socket()
self.socket.bind((ip, port))
self.socket.listen()
def run(self):
# 1. 添加无限循环
while True:
# 2. 给下面9行代码添加一个缩进
print('等待链接。。。')
connSocket, addr = self.socket.accept()
while True:
req = connSocket.recv(1024).decode()
if not req:
break
print('服务端收到的消息:', req)
connSocket.send('你好,我是服务端。我收到你的消息了!'.encode())
connSocket.close()
self.socket.close()
server = Server('0.0.0.0', 10021)
server.run()
08:client:
from socket import *
class Client:
def __init__(self, ip, port):
self.socket = socket()
self.socket.connect((ip, port))
def run(self):
while True:
content = input('请输入发送的内容:')
if not content:
continue
self.socket.send(content.encode())
res = self.socket.recv(1024).decode()
print('客户端收到的消息:', res)
self.socket.close()
client = Client('localhost', 10021)
client.run()
07:线程
import threading
import time
def father(task):
for i in range(5):
print('爸爸正在做%s' % task)
time.sleep(1)
t1 = threading.Thread(target=father, args=['扫地'])
t1.start()
# 1. 定义son函数,实现儿子正在做的任务
def son(task):
for i in range(5):
print('儿子正在做%s' % task)
time.sleep(1)
# 2. 创建子线程t2,执行son函数,传入参数:擦桌子,并启动t2子线程
t2 = threading.Thread(target=son, args=['擦桌子'])
t2.start()
# 3. 输出:主线程结束
print('主线程结束')
08:client
from socket import *
class Client:
def __init__(self, ip, port):
self.socket = socket()
self.socket.connect((ip, port))
def run(self):
while True:
content = input('请输入发送的内容:')
if not content:
continue
self.socket.send(content.encode())
res = self.socket.recv(1024).decode()
print('客户端收到的消息:', res)
self.socket.close()
client = Client('localhost', 10021)
client.run()
08:server
from socket import *
import threading
class Server:
def __init__(self, ip, port):
self.socket = socket()
self.socket.bind((ip, port))
self.socket.listen()
def run(self):
while True:
print('等待链接。。。')
connSocket, addr = self.socket.accept()
# 2.创建子线程t,执行handle方法,传入参数connSocket,并启动线程t
t = threading.Thread(target=self.handle, args=(connSocket,))
t.start()
self.socket.close()
# 1. 定义handle方法,封装run方法中内层循环和关闭连接socket的代码
def handle(self, connSocket):
while True:
req = connSocket.recv(1024).decode()
print('接收到的消息:', req)
if not req:
break
connSocket.send('你好,我收到你的消息了!'.encode())
connSocket.close()
server = Server('0.0.0.0', 10021)
server.run()
practice:
# 1. 定义minCost函数和参数cost,计算整个路程的最小车费
def minCost(cost):
# 2. 保存所有地点的最小车费,前两个点的最小车费已获得
mins = [0, cost[0]]
# 3. i从2开始到len(cost)反复执行三步计算
for i in range(2, len(cost) + 1):
# 4. 第一步: 前一站点出发车费+前一站点之前最小车费
min1 = mins[i - 1] + cost[i - 1]
# 5. 第二步: 前二站点出发车费+前二站点之前最小车费
min2 = mins[i - 2] + cost[i - 2]
# 6. 两个和取最小值,存入mins中当前i位置备用
m = min(min1, min2)
mins.append(m)
# 7. 返回最后一次计算的最小车费
return m
# 8. 终点之前每个站点出发的车费列表
cost = [20, 15, 5, 25, 16]
# 9. 调用函数计算整个路程的最小车费
m = minCost(cost)
print(m)
解除端口占用:
import os
import subprocess
def kill_process_on_port(port):
# 在 windows 电脑上
if os.name == 'nt':
command = f'netstat -ano | findstr :{port}'
process_info = subprocess.check_output(command, shell=True, encoding='utf-8').strip()
print(process_info)
if process_info != '':
pid = process_info.split()[-1]
subprocess.run(f'taskkill /pid {pid} /f', shell=True, stdout=subprocess.DEVNULL)
print(f'Killed process with PID {pid}')
else:
print(f'No process is running on port {port}')
# 在Mac电脑上
else:
command = f'netstat -nav | grep {port} | awk \'{{print $9}}\' | cut -d \'.\' -f 1'
process_info = os.popen(command).read().strip().split('\n')[1:]
if process_info != ['']:
for process in process_info:
pid = process.split()[1]
os.system(f'kill -9 {pid}')
else:
print(f'No process is running on port {port}')
# 用法示例
kill_process_on_port(10021)