IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Python网络编程 -> 正文阅读

[网络协议]Python网络编程


在学习网络编程之前,先要了解一些基础知识。

OSI七层模型

OSI(Open System Interconnect),即开放式系统互联。OSI定义了网络互连的七层框架(物理层、数据链路层、网络层、传输层、会话层、表示层、应用层),即ISO开放互连系统参考模型。如下图。
在这里插入图片描述

  1. 应用层
    OSI参考模型中最靠近用户的一层,是为计算机用户提供应用接口,也为用户直接提供各种网络服务。我们常见应用层的网络服务协议有:HTTP,HTTPS,FTP,POP3、SMTP等。
  2. 表示层
    表示层提供各种用于应用层数据的编码和转换功能,确保一个系统的应用层发送的数据能被另一个系统的应用层识别。
  3. 会话层
    会话层就是负责建立、管理和终止表示层实体之间的通信会话。
  4. 传输层
    建立了主机端到端的链接,传输层的作用是为上层协议提供端到端的可靠和透明的数据传输服务。
  5. 网络层
    本层通过IP寻址来建立两个节点之间的连接,为源端的运输层送来的分组,选择合适的路由和交换节点,正确无误地按照地址传送给目的端的运输层。
  6. 数据链路层
    将比特组合成字节,再将字节组合成帧,使用链路层地址 (以太网使用MAC地址)来访问介质,并进行差错检测。
  7. 物理层
    实际最终信号的传输是通过物理层实现的。通过物理介质传输比特流。规定了电平、速度和电缆针脚。

TCP/IP五层模型

TCP/IP五层协议与OSI七层模型对应关系如下
在这里插入图片描述
每一层主要的协议如下图
在这里插入图片描述
tcp是可靠的传输,面向连接,传输效率低,一般用来做web浏览器、文件传输;
udp是不可靠的传输,无连接的服务,传输效率高无拥塞机制。

基础

服务端server.py

# 服务端程序
import socket

# 导入socket模块
s = socket.socket()
# 获取自己的ip地址
host = socket.gethostname()
# 用12345端口通信
port = 12345
# 绑定ip和端口
s.bind((host, port))
# 等待用户连接 最多5人
s.listen(5)
# 建立和客户端的连接 c是对方的套接字 addr是对方ip地址
c, addr = s.accept()
print("对方连接地址是", addr)
# 通过客户的套接字发送welcome给对方
c.send('welcome'.encode('utf-8'))
# 接受客户信息
print(c.recv(1024).decode('utf-8'))

c.close()

客户端client.py

# 客户端程序
import socket

s = socket.socket()
# 要连接的ip地址
host = '192.168.1.6'
port = 12345
# 连接服务端
s.connect((host, port))
msg = input('要发送的信息:')
s.send(msg.encode('utf-8'))
print(s.recv(1024).decode('utf-8'))
s.close()

循环通信

上面的那个代码,客户端只能往服务端发一句话,这里使用while循环,可以实现持续发送的额功能
server.py

import socket

# AF_INET是使用ipv4进行通信;SOCK_STREAM使用tcp进行通信
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定端口
tcp_server_socket.bind(("", 12345))
tcp_server_socket.listen(128)
# 循环为多个客户服务多次
while True:
    new_client_socket, client_addr = tcp_server_socket.accept()
    print("the %s connecting" % str(client_addr))
    new_client_socket.send('welcome'.encode('utf-8'))
    # 循环为客户服务
    while True:
        try:
            recv_data = new_client_socket.recv(1024)
            print(recv_data.decode('utf-8'))
        except:
            print("断开连接")
            break
    # 关闭套接字
    new_client_socket.close()
tcp_server_socket.close()

client.py

import socket

tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_ip = "192.168.1.6"
server_port = 12345
server_add = (server_ip, server_port)
tcp_socket.connect(server_add)
first_data = tcp_socket.recv(1024)
print(first_data.decode('utf-8'))
# 持续发送数据
while True:
    send_data = input('sned-->')
    tcp_socket.send(send_data.encode('utf-8'))
tcp_socket.close()
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-09-05 11:23:21  更:2021-09-05 11:24:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 23:23:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码