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

    一内容回顾

      网络基础

      网络应用开发架构

        B/S架构   浏览器直接作为客户端的程序

        C/S架构

        B/S是特殊的C/S

      osi七层模型

        应用层  python代码   http  https  ftp  smtp

        socket

        传输层   port tcp/udp协议    四层交换机  四层路由器

        网络层  ip协议                     三层路由器  三层交换机

        数据链路层   mac地址  arp协议         网卡   二层交换机

        物理层

      tcp网络模型中

        arp协议-网络层

    二.今日内容

      tcp协议

       代码

       协议特点

         三次握手

         为什么使用tcp协议

         四次挥手

       代码进阶  完善

      udp协议

        代码

        协议特点

        代码的进阶

    tcp

    import socket
    
    
    sk = socket.socket()
    sk.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)  # 只在测试的时候添加,到正式的生产环境中应该去掉
    sk.bind(('127.0.0.1',9000))
    sk.listen()
    while True:
        conn,addr = sk.accept()  # 接电话
        while True:
            msg =conn.recv(1024)
            print(msg.decode('utf-8'))
            message = input('>>>')
            conn.send(message.encode('utf-8'))
            if message == 'q':
                break
        conn.close()
    
    sk.close()
    # 起web服务 永远先启动服务端 
    # server端 - 服务端
    # 端口被占用的原因
    # bind 已经向操作系统申请了一个9000的端口
    # 如果9000没有被占用,那么就批准给你使用
    # 直到sk.close的时候,这个端口才归还给操作系统
    # 程序结束但是忘记close关闭,
    # 那么操作系统就不能及时发现这个端口已经被归还
    # 当你重启程序再次申请使用9000端口的时候
    # 操作系统告诉你这个端口被占用了
    
    # 网络上是否连通决定了两台电脑能否通信
    # 和tcp建立了连接之后才能通信完全是两回事儿
    # 可靠的协议
    
    # 为什么要有tcp协议
        # 可靠
        # 全双工
        # 效率低
    # 建立连接 : 三次握手
    # 断开连接 : 四次挥手
    
    # 社交软件
        # tcp就不适用了 udp协议
    # 1.连接资源有限
    # 同一时刻只能和一个客户端沟通
    # 2.每一次数据的发送都需要一个回执来确保数据可靠
    # 数据发送的效率不高

    client

    import socket
    
    sk = socket.socket()
    
    sk.connect(('127.0.0.1',9000))
    while True:
        message = input('>>>')
        sk.send(message.encode('utf-8'))
        ret = sk.recv(1024)
        if ret == b'q':
            break
        print(ret.decode('utf-8'))
    sk.close()

    udp

    server

    import socket
    sk = socket.socket(type = socket.SOCK_DGRAM)
    addr = ('127.0.0.1',9000)
    sk.bind(addr)
    
    while True:
        # udp来说 第一个信息 必须是先接收
        msg,cli_addr = sk.recvfrom(1024)
        print(msg.decode('utf-8'))
        # message = input('>>>')
        sk.sendto('收到'.encode('utf-8'),cli_addr)
    
    
    sk.close()
    
    # 1 先把udp协议的cs调通
    # 2 让cs之间通信多说点儿话
    # 3 让多个client和server进行通信
    
    # 在server端根本就不应该有input

    client

    import socket
    sk = socket.socket(type = socket.SOCK_DGRAM)
    
    # b'hello' == 'hello'.encode('utd-8')
    sk.sendto(b'hello',('127.0.0.1',9000))
    msg,ser_addr = sk.recvfrom(1024)
    print(msg)
    print(ser_addr)
    
    sk.close()


  • 相关阅读:
    20175318 2018-2019-2 实验一《Java开发环境的熟悉》实验报告
    修改 IntelliJ IDEA 默认配置路径
    《Java程序设计》 第三周学习任务
    计算机网络第七版(谢希仁著)课后习题答案
    VMware虚拟机安装苹果Mac OS
    使用Xshell在Windows系统和Linux系统之间进行文件传输
    python:常用模块
    python:模块
    python:函数
    python字符编码与转码
  • 原文地址:https://www.cnblogs.com/pythonz/p/10059242.html
Copyright © 2011-2022 走看看