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

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

相关推荐
c++之路20 小时前
Bazel C++ 构建系列文档(三):构建第一个 C++ 项目
开发语言·c++
AI人工智能+电脑小能手20 小时前
【大白话说Java面试题 第117题】【并发篇】第17题:线程有几种状态,之间如何转换?
java·开发语言·面试
财经资讯数据_灵砚智能20 小时前
基于全球经济类多源新闻的NLP情感分析与数据可视化(夜间-次晨)2026年6月14日
大数据·人工智能·python·ai·信息可视化·自然语言处理·灵砚智能
森G20 小时前
61、信号与槽机制在 TCP 编程中的应用---------网络编程
网络·c++·qt·网络协议·tcp/ip
聚名网21 小时前
域名net,com,cn有区别吗?有哪些不同呢?
服务器·开发语言·php
牛油果子哥q21 小时前
STL set与map底层精讲,红黑树适配原理、有序去重特性、迭代器遍历、API实战与面试核心考点全解
开发语言·数据结构·c++·面试
foundbug99921 小时前
直流电机 PID 速度控制 MATLAB 仿真程序
开发语言·matlab
Tian_Hang1 天前
C++原型模式(Protype)
开发语言·c++·算法
swordbob1 天前
NIO 的 Channel 里有多个 BIO 吗?
linux·网络·nio
天天讯通1 天前
OKCC 呼叫中心安全性能全解析:技术防护与管理措施指南
大数据·开发语言·网络·人工智能·安全·语音识别