Python全栈(第一期)Day30

今日主要内容:
初识网络编程基本知识
实战

一,基本知识

# python基础
# 网络编程 _ 概念  4天
    # 什么是网络 网络的基础概念 *****
    # 由于不同机器上的程序要通信,才产生了网络
    # socket
        # TCP
        # UDP
# 并发编程 _ 概念
    # 一天

# 两个程序之间的通信可以分为两种:
# qq 微信 飞秋 网游 微博 歪歪  _基于应用的网络程序     应用类
# 百度 微博 知乎 博客园 网易   _基于浏览器的网络程序    Web类






# 网络编程中的 - C/S架构
    # c client  客户端
    # s server  服务端
    # 客户端 是 我用的时候 我才使用服务
    # 服务端 是 要一直运行 等待服务别人

# 网络编程中的 - B/S架构
    # b broser  浏览器
    # s server  服务端
    # 不需要额外的安装客户端了,只需要一个网址就可以访问
    # 轻量级  - 使用成本低
# 为什么wechat很火?
# 很成功的一点就是引入小程序。一种手机端的 B/S 架构




# 两种架构之间的关系:
# B/S架构是C/S架构的一种特殊形式
# 手机上 : 浏览器 app




'''
想要实现通信
网卡 and 网线
网卡上有全球唯一的mac地址
'''


# 两个py程序想要通信
    # 写文件
# 在不同机器上的两个py程序之间想要通信
    # 网络

# 网络的发展史
    # 网卡\网口
    # 两台机器之间 插上网线就可以通信
    # 网卡上 - mac地址
    # ip地址
        # 是4个点分十进制  - ipv4协议
            # 0.0.0.0 - 255.255.255.255
            # 127.0.0.1 本机
            # 内网字段 192.168.****
                    #  10.****
                    #  172.***
        # 6个点分十进制  - ipv6协议(现在正在推广...)
            # 0.0.0.0.0.0  - 255.255.255.255.255.255
    # 交换机
        # 广播
        # 单播
        # 组播
    # arp协议 : 通过IP地址获取某一台机器的mac地址
    # 子网掩码
        # 子网掩码 和 ip地址进行 按位 与 运算 就能得出一个机器所在的网段
        # 192.168.21.36
        # 11000000.10101000.00010101.00100100
        # 255.255.255.0   255.255.0.0
        # 11111111.11111111.11111111.00000000
        # 11000000.10101000.00010101.00000000
        # 192.168.21.0 网段
    # 网关地址 : 整个局域网中的机器能沟通过网关ip与外界通信
    # 网段 : 子网掩码 和 ip地址进行 按位 与 运算
    # 端口 : 0-65535
        # 在计算机上,每一个需要网络通信的程序 都会开一个端口
        # 在同一时间只会有一个程序占用一个端口
        # 不可能在同一时间有两个程序 占用同一个端口
        # IP + 端口 可以
        # 8000-酷狗音乐  22-ssh  3306-mysql
        # python 网络应用  8000
        # ip地址+端口号 : 在全网找到唯一的一台机器+唯一的应用
        # 我们选择端口 : 8000之后

    # tcp协议
        # 全双工的通信协议
            # 一旦连接建立起来,那么连接两端的机器能够随意互相通信
            # 面向连接的通信方式
            # 数据安全不容易丢失
            # 建立连接的 三次握手 ******
            # 断开连接的 四次挥手 ******

在这里插入图片描述

在这里插入图片描述

二,实战

服务端:

'''

server.py

'''
import socket

sk = socket.socket()          # 买手机


# 避免服务重启的时候避免:address  already in use
sk.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

# sk.bind(('ip', 'port'))
sk.bind(('127.0.0.1', 8080))  # 绑定手机卡
sk.listen()                   # 监听,等着有人给我打电话

conn, addr = sk.accept()
print(addr)

while True:
    # ret = conn.recv(1024)                # 听别人说话
    # print(ret)
    # conn.send(b'hi')   # 和别人说话,必须传输一个bytes类型
    # ret = conn.recv(1024)
    # print(ret.decode('utf-8'))
    # conn.send(bytes('牛肉拉面加个蛋!'.encode('utf-8')))


    ret = conn.recv(1024).decode('utf-8')
    if ret == 'bye':
        break
    print('收到新消息', ret)

    info = input('服务端输入:')
    conn.send(bytes(info, encoding='utf-8'))




conn.close()  # 挂电话
sk.close()    # 关手机

客户端:

'''

client.py

'''


import socket

sk = socket.socket()          # 买手机

sk.connect(('127.0.0.1', 8080))   # 拨打别人的号码

while True:
    # sk.send(b'hello')
    # ret = sk.recv(1024)
    # print(ret)
    # sk.send(bytes('我们中午吃什么?', encoding='utf-8'))
    # ret = sk.recv(1024)
    # print(ret.decode('utf-8'))

    info = input('客服端输入:')
    sk.send(bytes(info, encoding='utf-8'))
    ret = sk.recv(1024).decode('utf-8')
    print('收到新消息:', ret)

    if ret == 'bye':
        sk.send(bytes('bye', encoding='utf-8'))
        break


sk.close()

猜你喜欢

转载自blog.csdn.net/qq_42615032/article/details/86611534