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.执行效果图。

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

相关推荐
一位正在转型AI全栈的前端工程师3 小时前
AI 全栈学习之旅 -Week 8:从单 Agent 到多 Agent 协作:LangGraph 实战与记忆持久化
前端·python
长江后浪博客3 小时前
Python + YOLOv8 疲劳驾驶 AI 视觉检测入门:从模型训练到 ONNX 实时摄像头检测完整实战
人工智能·python·yolo·疲劳驾驶检测·onnx·yolov8
开开心心就好3 小时前
免费刷题软件推荐,支持导入题库自动判题
网络·网络协议·tcp/ip·jupyter·智能手机·电脑·idea
吴声子夜歌4 小时前
Java扩展——OkHttp
java·开发语言·okhttp
hhzz4 小时前
【OpenCV 入门到精通 01】认识 OpenCV 与计算机视觉:从零建立全局认知
人工智能·python·opencv·计算机视觉·开源
啊阿狸不会拉杆4 小时前
《计算机网络-自顶向下方法》5.7 网络管理、SNMP和NETCONF/YANG 读书笔记
开发语言·计算机网络·php
长友cy4 小时前
Qt官方示例D-BusListNames阅读
开发语言
萧瑟余晖4 小时前
Java深入解析篇六十一之编译器API(javax.tools)详解
java·开发语言
蜡台4 小时前
Kotlin 零基础完整版实战教程|从语法入门到Android工程实战
android·开发语言·kotlin
jimy14 小时前
C++ 的 “移动语义”——Move Semantics
开发语言·c++