架构

C/S架构

  C:client  客户端

  S:server  服务器

  CS架构是早期使用的一种架构,当然目前的各种app使用的也是这种架构,它的表现形式就是拥有专门的app。它是B/S架构的始祖。

B/S架构

  B: brows  浏览器

  S: server  服务器

  优点:

    统一了应用的接口(入口)。(是一个未来的发展趋势)

  B/S架构是在C/S架构上衍生出来的架构,目前使用浏览器访问类似某宝之类的网站就是使用的这种架构。他的表现形式就是不需要专门的app,在浏览器中输入对应的域名,就可以完成各种需求。它是未来的发展趋势,最大的优势就是可以减少对个人终端的硬件配置的依赖性,可以节省内存。

通信

同一台电脑上两个py文件通信

  同一台电脑上的两个py文件,可以借助一个文本文件进通信。具体过程是a.py文件将数据写入到c.txt文件中,然后b.py文件读取c.txt文件中的信息(这个信息是a.py文件写入的),然后b.py文件将读取到的信息进行处理,然后将反馈信息重新写入到c.txt文件中,最后a.py文件再从c.txt文件中获取b.py文件反馈的信息,这样就完成了一次通信。

 import socket
#
# type=SOCK_STREAM# 流 tcp协议的关键字
#
# 实例化一个socket对象 : 套接字
sk = socket.socket()# 不传参,默认使用默认参数,默认tcp协议
#
# '127.0.0.1':回环地址 本机默认地址
sk.bind(('127.0.0.1',8090))# 开启服务
#
sk.listen(5)# 监听 允许多少个客户端来连接我
#
fd,addr = sk.accept()# 等待接收客户端连接
#
fd.close()
sk.close()

网络编程代码框架及注释

 import socket

 sk = socket.socket()# 我买一个新手机
sk.bind(('127.0.0.1',8090))# 买一个电话卡,装上
sk.listen(5)# 告诉了几个人我的手机号
fd,addr = sk.accept()# 等着别人给打电话 while 1:
msg_r = fd.recv(1024).decode('utf-8')
if msg_r == 'q':
break
print(msg_r) msg_s = input(">>>")
fd.send(msg_s.encode('utf-8'))
if msg_s == 'q':
break fd.close()# 挂断电话
sk.close()# 关机

sever端

 # 要求
# 客户端主动发送一个q,断开连接,并且服务器也要断开连接
# 服务器端主动发送q,断开连接,并且此时客户端也要断开 import socket sk = socket.socket() sk.connect(('127.0.0.1',8090)) # 收发信息的逻辑
while 1:
msg_s = input('>>>')
sk.send(msg_s.encode('utf-8'))
if msg_s == 'q':
break msg_r = sk.recv(1024).decode('utf-8')
if msg_r == 'q':
break
print(msg_r) sk.close()

client端

  先运行服务器,再运行客户端。

网卡

  首先需要明确的一点就是,网卡是由网卡生产厂商生产的,不是电脑厂商生产的

  网卡上有一个mac地址,又叫物理地址,全世界唯一,可作为硬件设备的唯一标识。

查看mac地址命令

ipconfig -all

ipconfig /all

  以上两条命令都可以查看mac地址,只是两种不同的书写方式而已。

两台电脑之间的通信

  两台电脑之间通信,可以使用一根网线直接连接两台电脑,这样就可以进行简单的通信。平时在我们需要在两台电脑之间传输较大的文件时,可以使用这种方式,它的好处就是传输速度快,并且不需要移动硬盘或者U盘等。

几十台电脑之间的通信

  多台电脑之间的通信,需要建立局域网,使用交换机或者路由器将这多台设备连接起来,在交换机或者路由器中做好配置后即可进行通信。

交换机通信

广播

  交换机向局域网中广播一条信息,所有电脑都可以接收到广播的内容,可以想象下以前农村还是生产队的时候,大队的大喇叭,基本原理相同,也可以理解为吼一嗓子。

单播

  方向固定的向某一台主机发送消息。

组播

  向某一部分或某一组主机发送消息。

  下图为局域网中两台主机之间的通信,具体过程见图:

  整个通信过程简略概括如下:

    第一步:服务器1向交换机发送一条消息,这条消息包含了服务器1的IP、端口、mac地址以及目标主机的IP。

    第二步:交换机收到服务器1的消息后,向局域网中广播一条消息,消息携带了服务器1的IP、端口、mac地址以及目标主机的IP。

    第三步:局域网中的所有主机收到交换机广播的消息后,查看时候是找的自己。如果是找的自己,则将自己的IP、端口、mac地址发送给交换机,并申请和服务器1建立通信。

Ip地址

  IPV4地址是一个四位点分十进制的一串数字。

子网掩码

  子网掩码是计算机根据你的Ip地址产生的一个地址。

网段

  网段是根据IP地址 &(与) 子网掩码得出的一个结果。

  先给出IP地址为192.168.12.84,子网掩码为255.255.255.0,计算出这台计算机所在的网段。

    思路:

      第一步:将IP地址和子网掩码转换成二进制

      第二步:将IP地址和子网掩码的二进制进行按位与运算,得到的结果就是二进制的网段,最后再转换成十进制即可。

    计算过程:

      11000000.10101000.00001100.01010100  (192.168.12.84)

      1111 1111 .11111 111.111111 11 .00000000  (255.255.255.0)

  ---------------------------------------------------------------------------------

      11000000.10101000.00001100.00000000

       192     .  168   .  12    .  0

    所以这台计算机所在的网段为192.168.12.0。

二进制与十进制的转换

二转十

  如下图所示,二进制数从右至左,一次是2的0次方,2的1次方,2的2次方,2的3次方...2的7次方,将每一位换算成十进制后相加起来就得到了最终想要的十进制数。

十转二

  十进制转二进制就是将十进制的数字短除2,最后将余数按顺序排起来就得到了二进制数。

更多电脑之间的通信

  更多电脑之间的通信,就比如说是我们现在日常的上网,它需要建立广域网,多台电脑通过网关、路由器、交换机等设备连接起来进行数据通信。在信息发送过程中,具体下一跳要跳在哪是要根据路由器中的路由表外加信息中的路由信息决定的。

  广域网  交换机 + 路由器 + 代理ip

  广域网中,

6、库 == 模块

    就是别人写好的代码,我可以直接拿来调用的.

    tcp和udp协议都是基于socket模块来实现的,是对socket模块的再次封装.

    tcp

      安全可靠,面向连接,字节流服务 - - 代表没有边界。

    udp

      不安全不可靠,不面向连接,但是效率高。

7、端口号

  ip + port  唯一确定一台主机上的某一个程序。

  允许开发人员使用的端口范围从 8000 开始  8000 - 10000.

三次握手

  具体的通信过程如下图:

四次挥手

  具体的通信过程如下图:

OSI七层模型

  OSI七层模型,经过扁平化的处理,现在出现了两种形式,一种是五层的,一种的四层的.具体对应关系如下图:

小彩蛋:

    1、你知道哪些研发相关的架构?

      1) C/S架构

      2) B/S架构

    2、arp协议做了什么事情?

      ARP(Address Resolution Protocol,地址解析协议)是将IP地址解析为以太网MAC地址(或称物理地址)的协议。
在局域网中,当主机或其它网络设备有数据要发送给另一个主机或设备时,它必须知道对方的网络层地址(即IP地址)。但是仅仅有IP地址是不够的,因为IP数据报文必须封装成帧才能通过物理网络发送,因此发送站还必须有接收站的物理地址,所以需要一个从IP地址到物理地址的映射。APR就是实现这个功能的协议。
假设主机A和B在同一个网段,主机A要向主机B发送信息。具体的地址解析过程如下
      (1)主机A首先查看自己的ARP表,确定其中是否包含有主机B对应的ARP表项。如果找到了对应的MAC地址,则主机A直接利用ARP表中的MAC地址,对IP数据包进行帧封装,并将数据包发送给主机B。
      (2)如果主机A在ARP表中找不到对应的MAC地址,则将缓存该数据报文,然后以广播方式发送一个ARP请求报文。ARP请求报文中的发送端IP地址和发送端MAC地址为主机A的IP地址和MAC地址,目标IP地址和目标MAC地址为主机B的IP地址和全0的MAC地址。由于ARP请求报文以广播方式发送,该网段上的所有主机都可以接收到该请求,但只有被请求的主机(即主机B)会对该请求进行处理。
      (3)主机B比较自己的IP地址和ARP请求报文中的目标IP地址,当两者相同时进行如下处理:将ARP请求报文中的发送端(即主机A)的IP地址和MAC地址存入自己的ARP表中。之后以单播方式发送ARP响应报文给主机A,其中包含了自己的MAC地址。
      (4)主机A收到ARP响应报文后,将主机B的MAC地址加入到自己的ARP表中以用于后续报文的转发,同时将IP数据包进行封装后发送出去。
当主机A和主机B不在同一网段时,主机A就会先向网关发出ARP请求,ARP请求报文中的目标IP地址为网关的IP地址。当主机A从收到的响应报文中获得网关的MAC地址后,将报文封装并发给网关。如果网关没有主机B的ARP表项,网关会广播ARP请求,目标IP地址为主机B的IP地址,当网关从收到的响应报文中获得主机B的MAC地址后,就可以将报文发给主机B;如果网关已经有主机B的ARP表项,网关直接把报文发给主机B。

    3、交换机的通讯方式?

      1.交换机根据收到数据帧中的源MAC地址建立该地址同交换机端口的映射,并将其写入MAC地址表中。
      2.交换机将数据帧中的目的MAC地址同已建立的MAC地址表进行比较,以决定由哪个端口进行转发。  
      3.如数据帧中的目的MAC地址不在MAC地址表中,则向所有端口转发。这一过程称为泛洪(flood)。  
      4.广播帧和组播帧向所有的端口转发

    4、你认为tcp和udp的区别?

      TCP  安全可靠,面向连接,字节流服务 - - 代表没有边界。

      UDP  不安全不可靠,不面向连接,但是效率高。

    5、请描述出osi五层模型?

      应用层

      传输层

      网络层

      数据链路层

      物理层

  小彩蛋:

    1、网段ip怎么确定?

      ip地址 &(与) 子网掩码

    2、请描述B/S架构的优势

      统一了应用的接口。

Python_架构、同一台电脑上两个py文件通信、两台电脑如何通信、几十台电脑如何通信、更多电脑之间的通信、库、端口号的更多相关文章

  1. [软件开发的目录规范、区分py文件的两种用途]

    [软件开发的目录规范] 软件开发的目录规范 bin: 执行文件 conf: 存放配置文件相关代码 core: 存放源文件,业务逻辑相关代码 db: 存放数据库文件,主要用于与数据库交互 lib: 存放 ...

  2. 使用TCP在同一台电脑上可以建立连接,在两台电脑上却连接失败的原因分析

    最近在用unity做联机游戏,在网络方面费了不少劲,总是在代码没问题的时候出一些莫名奇妙的BUG,不过后来都决定了.如果感觉代码没问题,八成就是防火墙的问题. 用unity发布后的游戏,如果涉及网络, ...

  3. 如何生成能在没有安装opencv库及vs2010环境的电脑上运行的exe文件

    项目基本算法已经完成,甲方需要一个可以运行的demo.目前,程序能在自己的电脑上正常运行.移植到其他win7系统上,运行失败. 寻找各种解决办法,baidu找到两个办法: 1.使用静态链接的方法,这种 ...

  4. 在github上删除项目或某个文件(两种方式)

    一.使用命令删除 首先先上传一个文件到远程仓库,测试一下 输入命令git rm -r --cached 文件名 删除本地跟暂存区的文件,如下图 再输入命令 git commit -m "删除 ...

  5. 如何在云服务器上自动运行.py文件

    如果你在云服务器上运行的目的是保持一直运行,那就继续往下看吧. 有很多种方法,我这里说的是在linux上操作的一种. 利用screen会话分离. 因为在Screen环境下,所有的会话都独立的运行,并拥 ...

  6. python学习:两个py文件间的函数调用

    本例子是测试一些数据分析模型的R值,R值越接近1,表明该模型越适合分析该数据集. 本例子是在集成开发环境Aptana Studio 3 中创建 一个dataAnaly ,然后创建modelTest.p ...

  7. 如何在同一台电脑上部署多个tomcat实现多个tomcat在同一台电脑上同时启动

    有时候我们在开发的过程中难免会遇到需要在同一台电脑部署多个tomcat,且还要他们能够都单独同时启动不会对其他的tomcat造成影响 本文就简单记录一下,如何来实现这个骚操作 1. 下载tomcat的 ...

  8. 如何将Windows live writer草稿转存到其他电脑上

    ref:http://www.zhengsiwei.com/how-to-draft-windows-live-writer-archived-on-other-computers/   在写一篇关于 ...

  9. 在新的电脑上部署 Hexo,保留原有博客的方法

    用U盘从旧的电脑拷贝整个blog文件夹. 在新的电脑上装好git并配置好用户名和密钥. 安装 node.js 安装 hexo:npm install hexo-cli -g 用U盘把blog文件夹拷贝 ...

随机推荐

  1. linux shell 指令 诸如-d, -f, -e之类的判断表达式简介

    一.文件比较运算符 1. e filename 如果 filename存在,则为真 如: [ -e /var/log/syslog ] 2. -d filename 如果 filename为目录,则为 ...

  2. JavaScript实现元素拖动性能优化

    前言:前几天没事干写了个小网站,打算用原生的javascript实现元素的拖动,但是事情并没有想象的那么顺利,首先是实现了拖动的元素卡的不能再卡,简直不能够,上图~~ 看见没?这就是效果,简直让人欲哭 ...

  3. php 计算出一年中每周的周一日期

    最近接到一个任务,归纳起来,就是:要算出每年当中,每周的周一日期.想了一会,看了下date函数,深入了解了一下date函数各个参数的含义之后,终于把这道题做出来了! 在date()函数中,有一个参数对 ...

  4. 如何用fiddler + 手机设置无线代理 下载只有 手机才能访问的资源。

    我主要用来获取,一些特定的API,研究学习. 责任声明: 如果你用来违法犯罪,与我无关. 1.使电脑成为代理服务器 架代理服务器的软件有很多,自己百度一下.也可以用现成的代理软件.(其实Fiddler ...

  5. 《Java大学教程》—第20章 文件处理

    记录():一个单独的数据实例.域():一个属性. 20.3    输入和输出设备:P484输入过程和输出过程.操作系统负责建立三个流(stream):标准输入流(System.in).标准输出流(Sy ...

  6. Loj 3058. 「HNOI2019」白兔之舞

    Loj 3058. 「HNOI2019」白兔之舞 题目描述 有一张顶点数为 \((L+1)\times n\) 的有向图.这张图的每个顶点由一个二元组 \((u,v)\) 表示 \((0\le u\l ...

  7. Django 中的 日志处理

    日志处理: 上线后必须使用 便于以后的 维护 管理 根据日志 处理 BUG 在 项目中 定义一个 存放日志的 文件夹 log 存放所有 等级 的 日志 配置: 将下面的日志的 配置 写入 django ...

  8. P1145 约瑟夫 W(模拟)

    暴力+模拟 #include<iostream> #include<cstring> using namespace std; int ans, k, k2; ]; bool ...

  9. 转载 (三)surging 微服务框架使用系列之我的第一个服务(审计日志)

    (三)surging 微服务框架使用系列之我的第一个服务(审计日志)   前言:前面准备了那么久的准备工作,现在终于可以开始构建我们自己的服务了.这篇博客就让我们一起构建自己的第一个服务---审计日志 ...

  10. Springboot实现跨域请求

    之所以需要用到跨域请求,目的在于现在的Java项目,几乎基本上都前后端分离,除一些较老的维护项目外(通常是单体或者是maven多模块形式,不过本质上还是将前端放在webapps下). SpringBo ...