zoukankan      html  css  js  c++  java
  • 网络编程

    一、C/S架构和B/S架构

    c:client s:server 客户端,服务端,电脑上装的qq,微信

    b:browser s:server 浏览器,服务器, 京东,天猫

    bs架构本质也是cs

    二、网络:网络连接介质+网络协议(osi七层)

    互联网的本质就是一系列的网络协议,这个协议就叫OSI协议(一系列协议),按照功能不同,分工不同,人为的分层七层。实际上这个七层是不存在的。没有这七层的概念,只是人为的划分而已。区分出来的目的只是让你明白哪一层是干什么用的。

    每一层都运行不同的协议。协议是干什么的,协议就是标准。

    实际上还有人把它划成五层、四层。

    七层划分为:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。

    五层划分为:应用层、传输层、网络层、数据链路层、物理层。

    四层划分为:应用层、传输层、网络层、网络接口层。

    151-大白话OSI七层协议-七层协议.jpg?x-oss-process=style/watermark

    1.物理层:主要是基于电器特性发送高低电压(电信号),高电压对应数字1,低电压对应数字0

    2.数据链路层:定义了电信号的分组方式。

    3.网络层:引入一套新的地址用来区分不同的广播域/子网,这套地址即网络地址。

    4.传输层:

    ​ 由来:网络层的IP帮我们区分子网,以太网层的Mac帮我们找到主机,然后大家使用的都是应用程序,你的电脑上可能同时开启qq,暴风影音,等多个应用程序。

    ​ 功能:建立端口到端口的通信。

    ​ TCP协议:三次握手,四次挥手,可靠传输:客户端和服务端的每次请求都会回应。

    ​ UDP协议:不可靠传输:客户端和服务端只传输信息,不管对方是否回应。

    5.应用层:

    ​ 由来:用户使用的都是应用程序,均工作于应用层,互联网是开发的,大家都可以开发自己的应用程序,数据多种多样,必须规定好数据的组织形式。

    ​ 功能:规定应用程序的数据格式。

    ​ 上网流程分析:

    ​ -在浏览器输入:www.baidu.com

    ​ -会取dns服务器通过域名解析成ip地址

    ​ -向IP+端口号这个地址发送请求,就会访问到百度的服务器

    三、Socket

    socket:在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。

    在Python中通过socket写一个cs架构的软件

    服务端:

    # server.py
    
    import socket
    
    # 想象成买手机打电话:socket.SOCK_STREAM表示建立tcp连接,udp连接socket.SOCK_DGRAM
    soc = socket.socket()  # 买手机
    soc.bind(('127.0.0.1', 8080))  # 查电话卡:绑定ip地址 传元组:(ip, 端口号)
    soc.listen(5)  # 开机,监听,这个5是半连接池的大小
    
    # conn就是通路
    conn, addr = soc.accept()  # 等待别人给我打电话
    data = conn.recv(1024)  # 接受客户端传过来的信息,1024表示1024个字节
    print(data.decode())
    
    # conn.send 发送数据,数据必须是bytes格式
    conn.send(b'hello,client')
    
    conn.close()  # 挂断电话
    soc.close()  # 销毁手机
    

    客户端:

    # client.py
    
    import socket
    
    soc = socket.socket()  # 创建一个socket对象
    soc.connect(('127.0.0.1', 8080))  # 连接服务端
    soc.send(b'heool,server')  # 发送信息
    
    data = soc.recv(1024)
    print(data.decode())
    
    # 关闭连接
    soc.close()
    

  • 相关阅读:
    Python Web框架Django (三)
    谷歌把域名标记为不安全的解决办法
    tkmybatis VS mybatisplus
    jdbc预编译实现方式
    分析mybatis中 #{} 和${}的区别
    实体类id的几种生成方式
    java 获取mac地址
    javafx 表格某一列设置未复选框
    关闭在chrome里使用双指前进后退页面的功能
    调试maven源代码
  • 原文地址:https://www.cnblogs.com/17vv/p/11468216.html
Copyright © 2011-2022 走看看