day27

2023-10-27

1. 网络编程

# a. 软件 
   # 客户端:CS架构, client  ->   server 
   # 浏览器:BS架构, browser ->   server 

# b. 如何实现相互通信。
    
    # 需求一:编写两个软件,软件之间相互通信。
    
    # 需求二:两个人直接连接 (网线)
    
    # 需求三:教室相互通信(交换机)
            使用IP地址:ipconfig/ifconfig
            
            刘子龙:192.168.13.155
            齐鹏娟:192.168.13.25
            
            三亚女朋友:192.168.13.43  租公网IP
                
    # 需求四:和三亚的女友通信(交换机+n*路由器)
    
    # 总结:
        # 1. 相互通信本质发送 0101010101
        # 2. 交换机作用
        # 3. 通过ipconfig查看自己的内网IP
        # 4. 公网IP,掏钱。

2. 基于socket模块实现网络通信

示例1:实现一次简单的通信
    ----------------------------- 服务端 --------------------------------
    import socket
    
    # 创建socket对象
    server = socket.socket()
    
    # 绑定IP和端口
    server.bind(('192.168.3.6', 8000))
    
    # 后边最多可以等5个人,第六个直接拒绝连接请求
    server.listen(5)
    
    print('服务端准备开始接收客户端的连接')
    # 等待客户端来连接,如果没人来就傻傻的等待.
    # conn是客户端和服务端连接的对象(伞), 服务端以后要通过
    # addr是客户端的地址信息
    # #### 阻塞, 只有有客户进行连接, 则获取客户端连接然后开始进行通信
    conn, addr = server.accept()
    print('已经有人连接上了', conn, addr)
    
    # 通过对象去获取(王晓东通过伞给我发送的消息)
    # 1.24表示, 服务端通过伞获取数据是一次性最多拿1024字节
    data = conn.recv(1024)
    print('硬件有人发来消息', data)
    
    
    # 服务端通过连接对象(伞)给客户端回复了一个消息
    conn.send(b'stop')
    
    # 与客户端断开连接(放开那把伞)
    conn.close()
    
    # 关闭服务端的服务
    server.close()

    ----------------------------- 客户端 --------------------------------
    import socket
    
    client = socket.socket()
    
    # 王晓东向服务端发起连接请求(递伞)
    # 阻塞, 去连接, 知道连接成功后才会继续向下走
    client.connect(('192.168.3.6', 8000))
    
    
    # 链接上服务端后, 向服务端发送一个消息
    client.send(b'hello')
    
    # 王晓东等待服务端给他发送消息
    data = client.recv(1024)
    print(data)
    
    # 关闭自己
    client.close()
示例2:持续问答
    ---------------------------- 服务端 --------------------------------
    import socket
    
    server = socket.socket()
    
    server.bind(('192.168.3.6', 8000))
    
    server.listen(5)
    
    while 1:
        conn, addr = server.accept()  # 阻塞:永远等待连接
        # 字节类型
        while 1:
            data = conn.recv(1024)  # 阻塞:永远等待接收
            if data == b'exit':
                break
            response = data + b' SB'
            conn.send(response)
    
        conn.close()  # 与客户端断开连接(放开那把伞

    ---------------------------- 客户端 --------------------------------
    import socket
    
    sk = socket.socket()
    
    sk.connect(('192.168.3.6', 8000))
    
    while 1:
        name = input("请输入姓名:")
        sk.send(name.encode('utf-8'))  # 字节
        if name == 'exit':
            break
        response = sk.recv(1024)  # 字节
        print(response.decode('utf-8'))
    
    sk.close()  # 关闭自己
# 总结:
    # 为什么要网络通信发送的是字节?而不是字符串?
        # py3, send/recv 都是字节
        # py2, send/recv 都是字符串
        
        # 个人理解: 
        # (1)python3中的字符串默认是unicode类型,传输和存储时候很耗费网络流量或者很占用空间,所以转换为字节(目的是为了压缩),变成utf-8或者gbk,节省空间.
        # (2)python2中字符串的类型默认就是utf-8或者gbk.
    
    
    # 服务端:
        # accept,阻塞:等待客户端来连接.
        # recv,  阻塞:等待客户端发来数据.
        
    # 客户端:
       # connect,阻塞:一直在连接,直到连接成功才往下运行其他代码.
       # recv,   阻塞:等待服务端发来数据.

 

转载于:https://www.cnblogs.com/kangqi452/p/11617606.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

day27 的相关文章

随机推荐

  • Python3安装Numpy和matplotlib模块

    安装这两个模块有两种方法 第一种 自动安装 打开CMD输入 pip install matplotlib 安装完毕再输入pip install numpy 如果运气好的话能自动下载并安装 但实际情况是下载极慢 还特别容易断线 第二种方法 手
  • Python 统计列表中各元素出现的次数

    除了https www csdn net tags MtTaYg5sOTU3NzUtYmxvZwO0O0OO0O0O html 中提到的方法 还有简单的 print lou list count 1
  • Linux—多线程编程

    1 什么是线程 线程是操作系统能够进行运算调度的最小单位 它被包含在进程之中 是进程中的实际运作单位 一条线程指的是进程中一个单一顺序的控制流 一个进程中可以并发多个线程 每条线程并行执行不同的任务 线程包含了表示进程内执行环境必须的信息
  • 出现 conda虚拟环境默认放在C盘 解决方法

    目录 1 问题所示 2 原理分析 3 解决方法 3 1 方法一 3 2 方法二 1 问题所示 通过conda配置虚拟环境的时候 由于安装在D盘下 但是配置的环境默认都给我放C盘 通过如下命令 conda env list 最后查看该环境的确
  • shopify theme 跨境电商开发 liquid

    shopify theme 多语言国际化开发 shopify theme 跨境电商开发 liquid 本地编辑shopify主题的方式一 shopify cli 的命令 最近有有一个叫做shopify的跨境电商的东西需要开发一些主题和模板
  • [CentOS Python系列] 六.阿里云搭建Django网站详解

    本篇文章主要介绍讲述部署阿里云服务器Django网站环境 并通过IP地址访问网页的过程 写代码过程中往往第一步需要解决的就是配置开发环境 对于新手来说 这是非常头疼的事情 而当配置好之后或者对于老手来说 我们才能去实现理想的功能 基础性文章
  • linux安装node_exporter

    下载 Download Prometheus 解压 tar xvzf node exporter 1 5 0 darwin amd64 tar gz 解压后有三个文件 分别是LICENSE node exporter NOTICE 将nod
  • 物体无法碰撞导入的空气墙?

    在使用unity导入场景的时候 可能会因为编码问题导致导入的空气墙的Layer是空的 导致无法碰撞 解决方案 1 此时只需要给导入的空气墙设置Layer 2 在项目的 Edit gt Project Settings 的 如下 在图层矩阵中
  • Flutter屏幕适配

    文章目录 Flutter屏幕适配 一 Flutter中的单位 1 1 点 points 1 2 像素 pixels 1 3 设备像素比 devicePixelRatio 二 适配方案 2 1 rpx 适配 2 2 flutter scree
  • KEIL5使用技巧

    目录 1 文本美化 2 代码编辑技巧 1 TAB 键的妙用 2 快速位函数 变量被定义的地方 3 快速注释与快速消注释 3 其他小技巧 下面 向大家介绍KEIL5 软件的一些使用技巧 这些技巧在代码编辑和编写方面会非常有用 1 文本美化 文
  • NGSIM数据集处理-添加标签、特征标准化

    添加标签 对向左向右换道数据添加不同的标签 usr bin env python coding utf 8 In 1 import csv import pandas as pd f2 pd read csv CL train41 csv
  • django设置models.Model数据可以为空

    添加设置 null True blank True 比如 size models CharField max length 255 default null True blank True
  • 华为OD机试 - 分苹果 - 二进制(Java 2023 B卷 100分)

    目录 专栏导读 一 题目描述 二 输入描述 三 输出描述 四 解题思路 五 Java算法源码 六 效果展示 1 输入 2 输出 3 说明 核心算法 按照二进制加法计算 并且不计算进位 但是 B希望在满足A的情况下获取苹果重量最多 华为OD机
  • 神州云服务平台(型号:DCC-CRL1000)基本配置教学视频

    教学视频只提供网络搭建与应用技能大赛第二部分基本配置部分视频 仅供大家学习使用 2021年全国职业院校网络搭建及应用第二部分基本配置视频 由于在线播放视频有点模糊 所以给大家提供清晰的教学视频下载链接 神州云服务平台 型号 DCC CRL1
  • 教你如何看懂EMC空间辐射测试报告

    空间辐射测试是最常做的EMC电磁兼容测试项目之一 也是最容易出现问题的一个测试项目 对很多刚接触EMC的朋友来讲 拿到EMC的测试数据 往往感觉比较陌生 不知道怎么看这份数据 相信看完以下内容 你就不会陌生了 专业测试辐射的场所是屏蔽室 主
  • 单片机开发入坑指南

    入坑前了解 什么是单片机 单片机英文名Microcontrollers 即微控制器 英文简称MCU 单片机是一种集成电路芯片 是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU 随机存储器RAM 只读存储器ROM 多种I O口和
  • 第十讲:神州三层交换机配置单区域OSPF路由协议

    关于OSPF 其中的几个基本概念需要了解 OSPF是开放式最短路径优先的缩写 OSPF的协议号是89 OSPF协议中的Router ID是一台路由器的唯一标识 在整个白治系统中唯一 Router ID从路由器的接口lP地址中选择出来 选择的
  • win10从控制台直接进入Anaconda Prompt环境

  • Uboot 编译失败问题

    编译失败问题汇总 索引 一 已经有uboot源码 并且有 build sh 的情况 一 已经有uboot源码 并且有 build sh 的情况 首先Makefile 没有配置编译器 导致的错误 错误提示信息如下 cc1 error bad
  • day27

    1 网络编程 a 软件 客户端 CS架构 client gt server 浏览器 BS架构 browser gt server b 如何实现相互通信 需求一 编写两个软件 软件之间相互通信 需求二 两个人直接连接 网线 需求三 教室相互通