开发架构

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)

数据链路层

  • 提供链路交换,具体消息的发送

  • 以太网协议, 用于处理基于电信号发送的二进制数据

  • 以太网协议:

    1. 规定好电信号数据的分组方式
    2. mac地址, 在网络中唯一标识的网卡编号(12位)
  • 交换机: 让多台电脑连接在一起

  • 基于以太网协议发送数据:

    1. 特点: 广播, 单播
    2. 弊端: 广播风暴, 不能夸局域网通
  • 互联网: 让局域网之间进行通信

物理层

  1. 物理硬件, 网卡, 接口等的规定
  2. 基于电信号发送二进制数据

TCP协议

  • transmission control protocol, 传输控制协议

  • TCP是一个流式协议

  • 三次握手, 四次挥手:

    1. 三次握手建立连接

    2. 发送数据:

      客户端让服务端发送数据, 数据存放在内存中, 需要服务端确认收到后, 数据才会在内存中释放掉, 否则会隔一段时间发送一次, 让服务端返回确认收到

      一段时间内, 若服务端还是不返回, 则取消发送, 并释放内存中的数据

    3. 四次挥手终止连接

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的更多相关文章

  1. C#网络编程基础知识

    C#网络编程基础知识一 1.IPAddress类 用于表示一个IP地址.IPAddress默认构造函数 public IPAddress(long address);一般不用 其中Parse()方法最 ...

  2. iOS开发网络篇—网络编程基础

    iOS开发网络篇—网络编程基础 一.为什么要学习网络编程 1.简单说明 在移动互联网时代,移动应用的特征有: (1)几乎所有应用都需要用到网络,比如QQ.微博.网易新闻.优酷.百度地图 (2)只有通过 ...

  3. Android 网络编程基础之简单聊天程序

    前一篇讲了Android的网络编程基础,今天写了一个简单的聊天程序分享一下 首先是服务端代码: package com.jiao.socketdemo; import java.io.Buffered ...

  4. 服务器编程入门(4)Linux网络编程基础API

      问题聚焦:     这节介绍的不仅是网络编程的几个API     更重要的是,探讨了Linux网络编程基础API与内核中TCP/IP协议族之间的关系.     这节主要介绍三个方面的内容:套接字( ...

  5. Java网络编程基础(Netty预备知识)

    今天在家休息,闲来无事,写篇博客,陶冶下情操~~~ =================我是分割线================ 最近在重新学习Java网络编程基础,以便后续进行Netty的学习. 整 ...

  6. 用Netty开发中间件:网络编程基础

    用Netty开发中间件:网络编程基础 <Netty权威指南>在网上的评价不是很高,尤其是第一版,第二版能稍好些?入手后快速翻看了大半本,不免还是想对<Netty权威指南(第二版)&g ...

  7. Linux 高性能服务器编程——Linux网络编程基础API

    问题聚焦:     这节介绍的不仅是网络编程的几个API     更重要的是,探讨了Linux网络编程基础API与内核中TCP/IP协议族之间的关系.     这节主要介绍三个方面的内容:套接字(so ...

  8. Python网络编程基础pdf

    Python网络编程基础(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1VGwGtMSZbE0bSZe-MBl6qA 提取码:mert 复制这段内容后打开百度网盘手 ...

  9. 【网络编程1】网络编程基础-TCP、UDP编程

    网络基础知识 网络模型知识 OSI七层模型:(Open Systems Interconnection Reference Model)开放式通信系统互联参考模型,是国际标准化组织(ISO)提出的一个 ...

随机推荐

  1. [FPGA]Verilog实现寄存器LS374

    目录 想说的话... 正文 IC介绍 电路连接图 功能表 逻辑图 实验原理 单元实现_D触发器 整体实现(完整代码) 想说的话... 不久前正式开通了博客,以后有空了会尽量把自己学习过程中的心得或者感 ...

  2. GeoServer 发布的图层预览不了

    说明: 在用Geoserver发布Postgis发布的图层后,去LayerPreview中预览,但是选openlayers时,没有跳转到预览页面,而是弹出了下载WMS. 解决方案: 用KML方式预览时 ...

  3. Flex调用本地文件分析

    最近在用Flex做一个相册的功能,因为图片数据很多,所以想调用本地文件的方式做. 但是B/S的缘故,很多安全上的限制给我造成了不小的麻烦,把我这个小菜鸟弄的晕头转向. 第一,刚开始,查了很多资料发现都 ...

  4. Gemini.Workflow 双子工作流高级教程:数据库-设计文档

    数据库设计文档 数据库名:Workflow_New 序号 表名 说明 1 WF_Activity wf_Activity 2 WF_ActivityInstance wf_ActivityInstan ...

  5. (四十四)golang--协程(goroutine)和管道(channel)相结合实例

    统计1-8000之间的素数. 整体框架: 说明:有五个协程,三个管道.其中一个协程用于写入数字到intChan管道中,另外四个用于取出intChan管道中的数字并判断是否是素数,然后将素数写入到pri ...

  6. RobotFramework自动化测试框架-Selenium Web自动化(三)关于在RobotFramework中如何使用Selenium很全的总结(下)

    本文紧接着RobotFramework自动化测试框架-Selenium Web自动化(二)关于在RobotFramework中如何使用Selenium很全的总结(上)继续分享RobotFramewor ...

  7. 在Spring Security框架下JWT的实现细节原理

    一.回顾JWT的授权及鉴权流程 在笔者的上一篇文章中,已经为大家介绍了JWT以及其结构及使用方法.其授权与鉴权流程浓缩为以下两句话 授权:使用可信用户信息(用户名密码.短信登录)换取带有签名的JWT令 ...

  8. SQL Server2017 安装完成后找不到启动项解决方案

    很多用于当SQL Server2017 安装完成后开始菜单找不到启动项无法启动SQL Server2017 其实你只需要安装一下SSMS-Setup-CHS就可以了 安装完成之后就有了 SSMS-Se ...

  9. jenkins System error

    背景 在使用WAR包安装jenkins后,启动tomcat,显示启动成功,但最后提示信息如下: 04-Dec-2018 03:28:21.563 WARNING [Computer.threadPoo ...

  10. 微信小程序——事件冒泡

    在微信小程序的事件分为冒泡事件和非冒泡事件: 冒泡事件:当一个组件上的事件被触发后,该事件会向父节点传递. 非冒泡事件:当一个组件上的事件被触发后,该事件不会向父节点传递. WXML的冒泡事件列表: ...