Python_架构、同一台电脑上两个py文件通信、两台电脑如何通信、几十台电脑如何通信、更多电脑之间的通信、库、端口号
架构
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文件通信、两台电脑如何通信、几十台电脑如何通信、更多电脑之间的通信、库、端口号的更多相关文章
- [软件开发的目录规范、区分py文件的两种用途]
[软件开发的目录规范] 软件开发的目录规范 bin: 执行文件 conf: 存放配置文件相关代码 core: 存放源文件,业务逻辑相关代码 db: 存放数据库文件,主要用于与数据库交互 lib: 存放 ...
- 使用TCP在同一台电脑上可以建立连接,在两台电脑上却连接失败的原因分析
最近在用unity做联机游戏,在网络方面费了不少劲,总是在代码没问题的时候出一些莫名奇妙的BUG,不过后来都决定了.如果感觉代码没问题,八成就是防火墙的问题. 用unity发布后的游戏,如果涉及网络, ...
- 如何生成能在没有安装opencv库及vs2010环境的电脑上运行的exe文件
项目基本算法已经完成,甲方需要一个可以运行的demo.目前,程序能在自己的电脑上正常运行.移植到其他win7系统上,运行失败. 寻找各种解决办法,baidu找到两个办法: 1.使用静态链接的方法,这种 ...
- 在github上删除项目或某个文件(两种方式)
一.使用命令删除 首先先上传一个文件到远程仓库,测试一下 输入命令git rm -r --cached 文件名 删除本地跟暂存区的文件,如下图 再输入命令 git commit -m "删除 ...
- 如何在云服务器上自动运行.py文件
如果你在云服务器上运行的目的是保持一直运行,那就继续往下看吧. 有很多种方法,我这里说的是在linux上操作的一种. 利用screen会话分离. 因为在Screen环境下,所有的会话都独立的运行,并拥 ...
- python学习:两个py文件间的函数调用
本例子是测试一些数据分析模型的R值,R值越接近1,表明该模型越适合分析该数据集. 本例子是在集成开发环境Aptana Studio 3 中创建 一个dataAnaly ,然后创建modelTest.p ...
- 如何在同一台电脑上部署多个tomcat实现多个tomcat在同一台电脑上同时启动
有时候我们在开发的过程中难免会遇到需要在同一台电脑部署多个tomcat,且还要他们能够都单独同时启动不会对其他的tomcat造成影响 本文就简单记录一下,如何来实现这个骚操作 1. 下载tomcat的 ...
- 如何将Windows live writer草稿转存到其他电脑上
ref:http://www.zhengsiwei.com/how-to-draft-windows-live-writer-archived-on-other-computers/ 在写一篇关于 ...
- 在新的电脑上部署 Hexo,保留原有博客的方法
用U盘从旧的电脑拷贝整个blog文件夹. 在新的电脑上装好git并配置好用户名和密钥. 安装 node.js 安装 hexo:npm install hexo-cli -g 用U盘把blog文件夹拷贝 ...
随机推荐
- NSMutableArray 增删操作测试
NSMutableArray *testArray = [NSMutableArray array]; [testArray addObject:"]; [testArray addObje ...
- 企业级仓库harbor搭建
1.Harbor是什么? Harbor是Vmvare中国团队开发的开源registry仓库,相比docker官方拥有更丰富的权限权利和完善的架构设计,适用大规模docker集群部署提供仓库服务.在企业 ...
- June 1. 2018 Week 22nd Friday
What makes life dreary is the want of motive. 没有了目的,生活便暗淡无光. We all have dreams about our future, we ...
- 合并两个有序数组的golang实现
给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n. ...
- Python的datetime模块分析
datetime模块用于是date和time模块的合集,datetime有两个常量,MAXYEAR和MINYEAR,分别是9999和1. datetime模块定义了5个类,分别是 1.datetime ...
- 【C编程基础】make命令和makefile文件
1.关于程序的编译和链接 一般来说,无论是C.C++首先要把源文件编译成中间目标文件即 Object File(windows为.obj文件,unix为.o文件),这个动作叫做编译(compile). ...
- VGG网络
VGG论文给出了一个非常振奋人心的结论:卷积神经网络的深度增加和小卷积核的使用对网络的最终分类识别效果有很大的作用.记得在AlexNet论文中,也做了最后指出了网络深度的对最终的分类结果有很大的作用. ...
- PHP防盗链的基本思想&&防盗链的设置方法
PHP防盗链的基本思想&&防盗链的设置方法 网站盗链会大量消耗被盗链网站的带宽,而真正的点击率也许会很小,严重损害了被盗链网站的利益.本文主要介绍用PHP实现防盗链的方法以及基本思想, ...
- zabbix图形乱码问题解决办法
zabbix中的图形乱码的问题解决办法: 1.下载字体,例如:simkai.ttf楷体(注:在windows中的字体格式可能是TTC的,所以去网上下载一个ttf的字体) 2.上传到linux中(我使用 ...
- re库
一.Re库的主要功能: 函数 功能 re.search() 在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象 re.match() 在一个字符串的开始位置匹配正则表达式,返回match ...