网络编程
概述
用来实现 网络互联 不同计算机上运行的程序间可以进行数据交互
也叫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.执行效果图。
坚持分享 共同进步 如有错误 欢迎指出