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

网络编程

复制代码
概述
	用来实现 网络互联 不同计算机上运行的程序间可以进行数据交互
	也叫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类型的结果

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

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

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

服务器端代码

python 复制代码
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)

客户端代码

python 复制代码
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.使用多进程完成;

python 复制代码
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.执行效果图。

坚持分享 共同进步 如有错误 欢迎指出

相关推荐
Evand J1 分钟前
组合导航的MATLAB例程,二维平面上的CKF滤波,融合IMU和GNSS数据,仿真,观测为X和Y轴的坐标,附代码下载链接
开发语言·matlab·平面·imu·组合导航
蔗理苦14 分钟前
2025-10-07 Python不基础 20——全局变量与自由变量
开发语言·python
xiaohanbao0921 分钟前
理解神经网络流程
python·神经网络
韩立学长22 分钟前
【开题答辩实录分享】以《基于Python的旅游网站数据爬虫研究》为例进行答辩实录分享
python·旅游
-森屿安年-38 分钟前
C++ 类与对象
开发语言·c++
小蒜学长1 小时前
springboot基于javaweb的小零食销售系统的设计与实现(代码+数据库+LW)
java·开发语言·数据库·spring boot·后端
会开花的二叉树1 小时前
c语言贪吃蛇游戏开发
c语言·开发语言
韩立学长1 小时前
【开题答辩实录分享】以《C#大型超市商品上架调配管理系统的设计与实现》为例进行答辩实录分享
开发语言·c#
小熊出擊2 小时前
【pytest】finalizer 执行顺序:FILO 原则
python·测试工具·单元测试·pytest
安卓开发者2 小时前
鸿蒙NEXT网络通信实战:使用HTTP协议进行网络请求
网络·http·harmonyos