Python3 网络编程基础1
开发架构
C/S架构
- client 和 server, 既客户端和服务端
- 优点: 稳定性强, 节省网络资源
- 缺点: 使用多个软件需要下载多个客户端, 软件更新, 客户端也必须下载更新
B/S架构
- browser 和 server, 既浏览器端和服务端
- 优点: 以浏览器作为客户端, 直接在浏览器上访问软件. 无需下载多个客户端, 也无需下载更新软件
- 缺点: 稳定性差, 消耗网络资源过大
OSI模型
open system interconnection 开放系统互联
该模型定义了不同计算机互联的标准,是设计和描述计算机网络通信的基本框架
应用层
- 提供用户服务, 具体的内容由特定的程序规定
表示层
- 提供数据的加密和解密, 压缩和解压服务
会话层
- 确定建立应用链接, 选择传输服务
传输层
提供数据传输服务, 进行流量控制
TCP/UDP协议, 他们都是基于端口工作的
端口号: 标识计算机上的某个软件
端口号范围: 0-65535
注意: 操作系统中, 一般0-1024的端口号都默认已经被使用了, 尽量使用8000以后的端口号
开发中常用软件的默认端口号:
| 软件名 | 端口号 |
|---|---|
| Mysql | 3306 |
| mongodb | 27017 |
| Django | 8000 |
| Tomcat | 8080 |
| Flask | 5000 |
| Redis | 6379 |
- 服务端与客户端进行通信, 必须要建立连接, 产生双向通道
网络层
路由选择, 网络互联
IP地址: 为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异
点分十进制, 最小0.0.0.0, 最大255.255.255.255
本机IP: 回环地址 127.0.0.1 (localhost)
数据链路层
提供链路交换,具体消息的发送
以太网协议, 用于处理基于电信号发送的二进制数据
以太网协议:
- 规定好电信号数据的分组方式
- mac地址, 在网络中唯一标识的网卡编号(12位)
交换机: 让多台电脑连接在一起
基于以太网协议发送数据:
- 特点: 广播, 单播
- 弊端: 广播风暴, 不能夸局域网通
互联网: 让局域网之间进行通信
物理层
- 物理硬件, 网卡, 接口等的规定
- 基于电信号发送二进制数据
TCP协议
transmission control protocol, 传输控制协议
TCP是一个流式协议
三次握手, 四次挥手:
三次握手建立连接
发送数据:
客户端让服务端发送数据, 数据存放在内存中, 需要服务端确认收到后, 数据才会在内存中释放掉, 否则会隔一段时间发送一次, 让服务端返回确认收到
一段时间内, 若服务端还是不返回, 则取消发送, 并释放内存中的数据
四次挥手终止连接
socket
- socket是一个模块, 可以写一套C/S架构的套接字
- socket套接字会封装好各层协议的工作, 节省开发成本
# 服务端
import socket
server = socket.socket()
# 设置IP和端口
server.bind(
('127.0.0.1', 8888)
)
# 半连接池, 最大等待数为5
server.listen(5)
while True:
# 等待连接
conn, addr = server.accept() # conn: 建立连接产生的新的套接字, addr: 客户端端口
print(addr)
while True:
try:
# 接收数据
data = conn.recv(1024).decode('utf-8') # 接收最大1024字节的数据
if data == 'q':
break
if len(data) == 0:
continue
print(data)
# 发送数据
conn.send(data.encode('utf-8'))
except Exception as e:
print(e)
break
conn.close()
# 客户端
import socket
client = socket.socket()
# 服务端发送连接请求
client.connect(('127.0.0.1', 8888))
while True:
send_msg = input('client ---> server: ')
# 发送数据
client.send(send_msg.encode('utf-8'))
if send_msg == 'q':
break
# 接收数据
date = client.recv(1024).decode('utf-8')
print(date)
# 关闭连接
client.close()
Python3 网络编程基础1的更多相关文章
- C#网络编程基础知识
C#网络编程基础知识一 1.IPAddress类 用于表示一个IP地址.IPAddress默认构造函数 public IPAddress(long address);一般不用 其中Parse()方法最 ...
- iOS开发网络篇—网络编程基础
iOS开发网络篇—网络编程基础 一.为什么要学习网络编程 1.简单说明 在移动互联网时代,移动应用的特征有: (1)几乎所有应用都需要用到网络,比如QQ.微博.网易新闻.优酷.百度地图 (2)只有通过 ...
- Android 网络编程基础之简单聊天程序
前一篇讲了Android的网络编程基础,今天写了一个简单的聊天程序分享一下 首先是服务端代码: package com.jiao.socketdemo; import java.io.Buffered ...
- 服务器编程入门(4)Linux网络编程基础API
问题聚焦: 这节介绍的不仅是网络编程的几个API 更重要的是,探讨了Linux网络编程基础API与内核中TCP/IP协议族之间的关系. 这节主要介绍三个方面的内容:套接字( ...
- Java网络编程基础(Netty预备知识)
今天在家休息,闲来无事,写篇博客,陶冶下情操~~~ =================我是分割线================ 最近在重新学习Java网络编程基础,以便后续进行Netty的学习. 整 ...
- 用Netty开发中间件:网络编程基础
用Netty开发中间件:网络编程基础 <Netty权威指南>在网上的评价不是很高,尤其是第一版,第二版能稍好些?入手后快速翻看了大半本,不免还是想对<Netty权威指南(第二版)&g ...
- Linux 高性能服务器编程——Linux网络编程基础API
问题聚焦: 这节介绍的不仅是网络编程的几个API 更重要的是,探讨了Linux网络编程基础API与内核中TCP/IP协议族之间的关系. 这节主要介绍三个方面的内容:套接字(so ...
- Python网络编程基础pdf
Python网络编程基础(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1VGwGtMSZbE0bSZe-MBl6qA 提取码:mert 复制这段内容后打开百度网盘手 ...
- 【网络编程1】网络编程基础-TCP、UDP编程
网络基础知识 网络模型知识 OSI七层模型:(Open Systems Interconnection Reference Model)开放式通信系统互联参考模型,是国际标准化组织(ISO)提出的一个 ...
随机推荐
- nyoj 29-求转置矩阵问题 (行,列位置调换)
29-求转置矩阵问题 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:8 submit:18 题目描述: 求一个三行三列的转置矩阵. 输入描述: 第一 ...
- MySQL数据库root账户密码忘记两种处理方法(保有效)
方法1: 1.停止MySQL服务 # kill `cat /var/run/mysqld/mysqld.pid` 或者 # pkill mysqld 2.创建一个密码赋值语句的文本文件 # vi my ...
- 【SpringBoot | Druid】SpringBoot整合Druid
SpringBoot整合Druid Druid是个十分强大的后端管理工具,具体的功能和用途请问阿里爸爸 1. 在pom.xml中导入包 <!-- alibaba 的druid数据库连接池 --& ...
- root权限后,不要忘了还有selinux
下面的例子运行在中兴android 5.0手机上. 当我们使用root权限的python去创建socket监听端口8088时,selinux向kmsg输出了下面的记录 python-android5 ...
- 关于PHP中依赖注入的详细介绍
依赖注入原理: 依赖注入是一种允许我们从硬编码的依赖中解耦出来,从而在运行时或者编译时能够修改的软件设计模式.简而言之就是可以让我们在类的方法中更加方便的调用与之关联的类. 实例讲解: 假设有一个这样 ...
- PowerMock学习(七)之Mock Constructor的使用
前言 我们在编码的时候,总习惯在构造器中传参数,那么在powermock中是怎么模拟带参数构造的呢,这并不难. 模拟场景 我们先模拟这样一个场景,通过dao中的传入一个是布尔类型(是否加载)和一个枚举 ...
- python--BMI
#bmi height,weight = eval(input("请输入身高(m) 体重(kg),以逗号隔开\n")) bmi = weight/pow(weight,2) pri ...
- Anaconda中启动Python时的错误:UnicodeDecodeError: 'gbk' codec can't decode byte 0xaf in position 553
今天,在Anaconda prompt启动python遇到了如下错误: UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0xaf in positi ...
- csrf与xss
CSRF攻击攻击原理及过程如下: 1. 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A: 2.在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登 ...
- IdentityServer4 保护.net framework webapi
一.IS4服务器配置 1.新建一个Asp.net Core MVC程序,模板选择 Empty 2.Nuget添加 IdentityServer4,我这里添加的是2.5.3 3.添加Config文件, ...