Python基础(十三)网络编程

1. 网络编程的基本知识

1. 计算机网络的主要功能
  1. 资源共享
  2. 信息传输和集中处理
  3. 均衡负载和分布处理
  4. 综合信息服务
2. 计算机网络常见类型
  1. 局域网(LAN)
  2. 域域网(MAN)
  3. 广域网(WAN)

Internet可以被视为最大的广域网

Python基础(十三)网络编程_第1张图片
OSI参考模型的推荐分层
Python基础(十三)网络编程_第2张图片
OSI参考模型和TCP/IP分层模型的大致对应关系
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. 网络模块概述
Python基础(十三)网络编程_第3张图片
四层网络模型及其对应的协议
Python基础(十三)网络编程_第4张图片
Python标准库中的网络相关模块

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)
Python基础(十三)网络编程_第5张图片
参数

Python基础(十三)网络编程_第6张图片
常用办法1

Python基础(十三)网络编程_第7张图片
常用办法2

创建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'))


先运行服务端代码,此时并没有输出什么
运行客户端代码,客户端成功接收服务端发过来的数据


服务端输出结果

 ('127.0.0.1', 51315)
发送成功

客户端输出结果

连接成功

4. 基于UDP协议的网络编程

UDP是一种不可靠的网络协议,他在通信实例的两端各建立一个socket。但这两个socket之间并没有虚拟链路,他们只是发送,接收数据报的对象。Python同样使用socket模块来支持UDP协议的通信。

# 创建socket对象
s = socket.socket(socket.SOCK_DGRAM, socket.SOCK_STREAM)
.........

你可能感兴趣的:(Python基础(十三)网络编程)