一 . 网络编程

CS架构 客户端服务端架构
服务端:提供服务的
客户端:享受服务的
BS架构:浏览器和服务端 网络通信流程:
集线器:将所有连接上它的电脑全部联通起来
交换机:升级版的集线器
网卡:接收处理电信号
Mac地址:网络设备的全球唯一标示,又称为物理地址
广播 单播
广播风暴
Ipv4地址:4个点分十进制 还有ipv6
作用:划分广播域
子网掩码:计算ip地址段,或者判断ip地址是否属于同一地址段
DHCP协议:自动获取ip地址
DNS:域名解析
Arp协议:通过ip地址获取mac,因为ip地址不固定,mac是全球唯一的
路由器:转发消息,管理内网
路由协议:计算路由转发的最优路径
端口:标示电脑上某个应用程序
Ip地址+端口 = 能够唯一锁定一台电脑和这个电脑上的某个应用程序
网关:把关用的,意思就说所有对外的请求都要经过网关
NAT技术:网络地址转换,内网ip地址转换为公网或者说外网的ip地址

  

  我们在微信聊天, 淘宝购物, 百度上搜索的时候, 我们是客户端, 微信, 淘宝, 百度是服务端, 这种客户端和服务端进行交互的时候都是基于网络的.

  客户端英文名称:Client(使用服务端的服务),服务端英文名称:Server(一直运行着,等待服务别人,不能有一天访问百度,百度页面打不开,不行吧。),下面所说的C\S架构就是说的Client\Server架构。

    a.硬件C\S架构:打印机。

    b.软件C\S架构:微信、优酷、浏览器(IE、谷歌等)。其中浏览器又比较特殊,很多网站是基于浏览器来进行访问的,浏览器和各个网站服务端进行的通讯方式又常被成为B\S架构(浏览器英文名称:Browser),web开发就是这个,如果我把所有的东西都做成应用程序是不是很麻烦啊,要装很多的软件对吧,所有就开始有了B\S架构,只需要个浏览器就能使用很多的工具了,并且提供了一个统一入口,这也是为什么B\S架构火了起来。但是手机端的还是用的应用程序多一些,但是手机端B\S架构也是一个趋势,就像微信的小程序和公众号,为什么说是一个趋势呢,不仅仅是因为方便因为省钱,而是提供了一个统一的入口,其实微信早就实现了。统一入口是什么意思呢?就像我们公司经常用的一个公司内部管理系统,请假、打卡、报销、查客户等等,如果这些功能都需要打开一个网页或者app,是不是很难受啊,那么公司就做了这么一个系统,大家在这个系统上关于上班的一些你需要的功能就都能完成了,这就是统一入口。这也是一个开发思想,大程序分成几个小程序,开发速度也快,开发一个小功能就能上线,而不需要等着所有的功能全部开发完成才上线,解耦分治思想,公司做开发时这种思想很流行,迭代开发。

    不管哪个架构,他们都要进行网络通信,基本都要用socket,我们学习socekt就是为了完成C\S架构项目的开发

# 客户端
import socket # 创建socket对象
client = socket.socket()
# 找到服务器端口,IP地址要用字符串,端口要用int 一般在8000以后
server_ip_port = ('192.168.12.56',8001)
# 连接服务端的应用程序,通过connect方法,参数是服务端的IP地址和端口
client.connect(server_ip_port)
while 1:
to_server_msg = input('说给服务端听:')
print('=======输入Q退出=======')
if to_server_msg.upper() == 'Q':
client.send(to_server_msg.encode('utf-8')) # 需要把Q停止的信息发送给服务端,服务端收到才能关闭服务端的管道
break
else:
# 发消息,用的是send方法,里面应该装bytes 需要把中文编码
client.send(to_server_msg.encode('utf-8'))
# 服务端通过conn连接通道来收发消息,通过recv方法,recv里面的参数是字节(B),1024的意思1024B=1KB
from_server_msg = client.recv(1024) # receive
# 把bytes解码成中文
print('服务端返回的话:',from_server_msg.decode('utf-8'))
client.close()
# 服务端
import socket # 创建socket对象
server = socket.socket()
# 给程序设置一个IP地址和端口号
ip_port = ('192.168.12.56',8001)
# 绑定IP地址和端口
server.bind(ip_port)
# 监听IP地址和端口,括号里面什么都不用写(连接的客户端没有上限),也可以填数字,填几次等待着几个客户端
server.listen(3)
print('====开始建立连接====')
# 等待建立连接,conn是连接通道,address是客户端的地址,(阻塞程序)
while 1:
conn,addr = server.accept()
while 1:
# 服务端通过conn连接通道来收发消息,通过recv方法,recv里面的参数是字节(B),1024的意思1024B=1KB
from_client_msg = conn.recv(1024)
print('客户端发出:', from_client_msg.decode('utf-8'))
to_client_msg = input('回复客户端的信息:')
conn.send(to_client_msg.encode('utf-8'))
# 关闭通道
conn.close()

最新文章

  1. PHP浅复制与深复制
  2. IIS增加并发数
  3. 用windows远程连接linux桌面(使用tightvnc或者tigervnc)
  4. Oracle 递归函数与等级
  5. javascript 之原型理解
  6. Jasper_crosstab_group _Error incrementing crosstab dataset
  7. 【gcd+数学证明】【HDU1722】 CAKE
  8. pycharm的激活
  9. 关于RMAN的配置信息存储和控制文件的关系
  10. GL应用方面
  11. SQLServer 延迟事务持久性
  12. Java经典编程题50道之五十
  13. JavaScript初探之字符串与数组
  14. Spring众多jar包的特点,及Spring jar包官网下载方法
  15. windows php7 安装redis扩展
  16. window下Nexus私服高级搭建
  17. FFI
  18. 听闻 kubernetes,快速了解一番
  19. day10 内容大纲
  20. 【树莓派】使用xdrp远程登录树莓派的图形界面

热门文章

  1. scrapy框架中Item Pipeline用法
  2. Influxdb 时序数据库 centos 安装
  3. MDX之Case When用法
  4. yii2 操作数据库
  5. java 并发容器一之ConcurrentHashMap(基于JDK1.8)
  6. WdatePicker时间插件 有百度云下载 jsp界面选择时间的简单方法
  7. Android中的Selector的使用总结
  8. PMP项目管理学习笔记引言(1)——为啥要取得认证?
  9. Django ORM 一对一,一对多,多对多, 添加,批量插入和查询
  10. MINST手写数字识别(二)—— 卷积神经网络(CNN)