Python基础(十三)网络编程
2019-11-15 本文已影响0人
鹊南飞_
1. 网络编程的基本知识
1. 计算机网络的主要功能
- 资源共享
- 信息传输和集中处理
- 均衡负载和分布处理
- 综合信息服务
2. 计算机网络常见类型
- 局域网(LAN)
- 域域网(MAN)
- 广域网(WAN)
Internet可以被视为最大的广域网


3. IP
IP地址被分为A,B,C,D,E五类
- A类: 10.0.0.0 ~ 10.255.255.255
- B类: 172.16.0.0 ~ 173.21.255.255
- C类: 192.168.0.0 ~ 192.168.255.255
4. 端口
- 公认端口: 0 ~ 1023
- 注册端口: 1024 ~ 49151
- 动态或私有端口: 49152 ~ 65535
2. Python的基本网络支持
1. 网络模块概述


3. 基于TCP协议的网络编程
TCP/IP通信协议是一种可靠的网络协议,他在通信的两端各建立一个socket,从而形成虚拟网络链路。一旦建立了虚拟的网络链路,两端的程序就可以通过该链路进行通信了。Python的socket模块为基于TCP协议的网络通信提供了良好的封装,Python使用socket对象来表示两端的通信端口,并通过socket进行网络通信。
1. 使用socket创建TCP服务端
socket.socket(family=AF_INET,type=SOCK_STREAM,proto=0,fileno=None)



创建socket的基本步骤:
- 服务器端先创建一个socket对象
- 服务器端socket将自己绑定到指定IP和端口
- 服务器端socket调用listen()方法监听网络
- 程序采用循环不断调用socket的accept()方法来接收客户端的连接
示例代码如下:
服务端代码
import socket
# 创建socket对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定IP和端口
s.bind(('127.0.0.1', 20001))
# 设置最大连接数,超过后排队
s.listen(5)
while True:
# 建立客户端连接
c, addr = s.accept()
print(c, addr)
msg = '连接成功'
c.send(msg.encode('utf-8'))
print('发送成功')
c.close()
客户端代码
import socket
# 创建socket对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接服务
s.connect(('127.0.0.1', 20001))
# 接收数据
msg = s.recv(1024)
# 关闭连接
s.close()
print(msg.decode('utf-8'))
先运行服务端代码,此时并没有输出什么
运行客户端代码,客户端成功接收服务端发过来的数据
服务端输出结果
<socket.socket fd=456, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 20001), raddr=('127.0.0.1', 51315)> ('127.0.0.1', 51315)
发送成功
客户端输出结果
连接成功
4. 基于UDP协议的网络编程
UDP是一种不可靠的网络协议,他在通信实例的两端各建立一个socket。但这两个socket之间并没有虚拟链路,他们只是发送,接收数据报的对象。Python同样使用socket模块来支持UDP协议的通信。
# 创建socket对象
s = socket.socket(socket.SOCK_DGRAM, socket.SOCK_STREAM)
.........