Python知识分享第十九天-网络编程

时间:2024-12-05 13:03:06

网络编程

概述
	用来实现 网络互联 不同计算机上运行的程序间可以进行数据交互
	也叫Socket编程 套接字编程
三要素
	IP地址
		概述
			设备在网络中的唯一标识
		分类
			IPV4
				城域网
					1+3
				广域网
					2+2
				局域网
					3+1
			IPV6
				八字节 十六进制
		相关dos命令
			查看ip
				windows: ipconfig
				mac和linux: ifconfig
			测试网络
				ping 域名和主机名
			一个特殊ip
				127.0.0.1
					本地回环(回路)地址代表本机
	端口
		端口
			传输数据的 
		端口号
			程序在设备中的唯一标识
		范围
			0~65535  0~1023被系统占用 或做保留接口 我们自己定义端口的时候 要避开这个范围
	协议
		概述: 指的是通信规则
		分类
			UDP
				无需依赖连接
				数据包模式 不能超过64kb
				不安全
				效率高
				不区分客户端服务端 发送方接收方
			TCP
				面向连接
				字节流 无大小限制
				安全可靠的协议
				效率相对较低
				区分客户端的服务端
	扩展
		三次握手
			客户端 => 服务器申请建立连接
			服务器 => 客户端 可以连接
			客户端 => 服务器端 成功建立连接
		四次挥手
			双向
			A => B
			B = > A
Socket编程(原理)介绍
	也叫套接字通信 通信双方都有自己的Socket对象 数据在Socket之间通过数据报包或者 字节流的方式进行传输
	端口号复用
		概述
			程序如果执行结束 释放端口 通常需要1~2分钟 如果我们继续使用 未被释放时就会报错
		解决方案
			换一个端口号
			设置端口号重用
				server_socket.setsocketopt(socket.SOL_SOCKET,scoket.SO_REUSEADDR,True)
网络编程操作步骤
	客户端
		1.创建客户端Socket对象
		2.连接服务器 ip和端口号
		3.接收服务器的消息
		4.发送数据到服务器端
		5.释放资源
	服务器端
		1.创建服务器端Socket
		2.绑定服务器端ip和端口号
		3.设置监听连接数
		4.启动监听 等待客户端建立连接
		5.给客户端发送数据
		6.接收客户端发送数据
		7.释放资源

一. 请简要描述下网络编程的三要素,并分别说说其作用。

“”"
网络编程三要素:
IP: 用来确定设备在网络中的唯一标识
端口: 用来确定应用在设备上的唯一标识
协议: 规定通信规则
“”"

二. 请说说TCP网络程序开发的步骤流程。

​ TCP服务器程序开发流程;
1.创建socket对象
2.绑定服务器
3.设置监听
4.等待接收客户端的连接请求
5.发送数据
6.接收数据
7.关闭socket
​ TCP客户端程序开发流程
1.创建socket对象
2.连接服务器
3.接受数据
4.发送数据
5.关闭socket

三. 将字符串“AI人工智能前景广阔”转换为二进制bytes类型的结果;将二进制bytes数据 b"AI python"转换为字符串str类型的结果

b1 = 'AI人工智能前景广阔'.encode('utf-8')
print(b1)
print(b1.decode('utf-8'))

s1 = b"AI python".decode()
print(s1, type(s1))

四. 通过TCP客户端发送消息:欢迎来王者荣耀,真好玩!通过TCP服务器端接收消息,并打印出来

服务器端代码

import socket
# 创建服务器端的Socket对象 指定            地址族             协议
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定IP地址 端口 (元组方式)
server_socket.bind(('127.0.0.1', 10086))
# 设置最大监听数量
server_socket.listen(1)
# 开启监听 等待客户端建立连接 返回元组 (负责和客户端交互的Socket 客户端的IP信息)
client_socket, client_info = server_socket.accept()
# 给客户端发送消息
client_socket.send('欢迎来王者荣耀,真好玩!'.encode('utf-8'))
# 等待客户端回执信息
data = client_socket.recv(1024)
data_str = data.decode('utf-8')
print(f'服务器端收到{client_info} 发的消息 {data_str}')
# 释放资源
client_socket.close()
# 设置端口重用
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)

客户端代码

import socket

# 创建客户端Socket对象 指定              地址族                     协议
client_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 绑定服务器端地址 IP 端口 (元组格式)
client_socket.connect(('127.0.0.1', 10086))
# 接受服务器传过来的值
data_bytes = client_socket.recv(1024)
data = data_bytes.decode('utf-8')
print(f'客户端收到的信息{data}')

# 给服务器发送回执信息
client_socket.send('王者荣耀真好玩,我很喜欢'.encode('utf-8'))

# 释放资源
client_socket.close()

五.说一说为什么主进程创建子进程的代码块需要写在“if name == ‘main’:下

因为main函数默认会在子线程执行完后才关闭

六.请使用多任务形式完成:一边编程、一边听音乐、一边跟同事聊天。要求如下:

​ a.使用多进程完成;

import multiprocessing, time


def coding():
    for i in range(1, 11):
        time.sleep(0.02)
        print(f'我在写第 {i} 行代码')


def music():
    for i in range(1, 11):
        time.sleep(0.01)
        print(f'我在听第 {i} 首歌')


def chat():
    for i in range(1, 11):
        time.sleep(0.01)
        print(f'我们的聊天人数有 {i} 个')


if __name__ == '__main__':
    p1 = multiprocessing.Process(target=coding)
    p2 = multiprocessing.Process(target=music)
    p3 = multiprocessing.Process(target=chat)

    p1.start()
    p2.start()
    p3.start()

​ b.执行效果图。

在这里插入图片描述
坚持分享 共同进步 如有错误 欢迎指出