zoukankan      html  css  js  c++  java
  • 总结day25 ---- udp 初识, 和tcp 进阶

    前情提要

        一: tcp 和udp 的区别

          

    #  tcp
    #     # 面向连接的 可靠的 全双工的 流式传输
    #     # 面向连接 :同一时刻只能和一个客户端通信
    #     #            三次握手、四次挥手
    #     # 可靠的 :数据不丢失、慢
    #     # 全双工 :能够双向通信
    #     # 流式传输 :粘包 无边界
    # udp
        # 无连接的 面向数据包 不可靠的 快速的
        # 无连接的 :不需要accept/connect 也没有握手
        # 面向数据包的 :不会粘包
        # 不可靠的 :没有自动回复的机制
        # 快速的 :没有那些复杂的计算、保证数据传输的机制

        二:udp 的简单示例

          1:服务端

    import socket
    sk=socket.socket(type=socket.SOCK_DGRAM) #默认是tcp 协议,需要更改type 类型,
    sk.bind(('127.0.0.1',9000))     #建立服务
    msg ,addr =sk.recvfrom(1024)   #每次大小
    print(msg)
    print(addr)
    sk.sendto(b'world',addr)     #内容,地址
    sk.close()

      

          2:客户端

    import socket
    sk=socket.socket(type=socket.SOCK_DGRAM)
    sk.sendto(b'hello',('127.0.01',9000))
    msg,addr =sk.recvfrom(1024)
    print(msg)
    sk.close()

        三:udp实现多人聊天

          1:服务端

    import socket
    sk =socket.socket(type=socket.SOCK_DGRAM)
    sk.bind(('127.0.0.1',9000)) #建立服务
    while 1:
        msg ,addr =sk.recvfrom(1024)
        print(msg)
        connect =input('>>>>').encode()
        sk.sendto(connect,addr)

          2:服务端

    import socket
    sk =socket.socket(type=socket.SOCK_DGRAM)
    while 1:
        connect =input('>>>>>').encode()
        sk.sendto(connect,('127.0.0.1',9000))
        msg ,addr =sk.recvfrom(1024)
        print(msg)

        四:tcp 实现多并发解决聊天问题(并不是群发只是逐个解决)

          1:服务端

    import socketserver #soceket的进阶类
    class Myserver(socketserver.BaseRequestHandler): #固定格式
        def handle(self):
            conn =self.request
            while 1:
                conttent =input('>>>>>>>>>>>').encode()
                conn.send(conttent)
    
    server =socketserver.ThreadingTCPServer(('127.0.0.1',9000),Myserver)
    server.serve_forever()

           2客户端:

    import socket
    sk =socket.socket()
    sk.connect(('127.0.0.1',9000))
    while 1:
        ret =sk.recv(1024)
        print(ret)
    sk.close()

     小作业:

    # 1.完成一个在网络上对文件的传输(进阶需求 如果这个文件非常大 2个G)
    # 1)完成文件的下载
    # 2)把用户认证这个功能加上
    # 必须先认证 再进行上传下载
    # 3)文件的一致性校验
    # 2.练习一些udp协议的操作
    # 3.使用socketserver实现一个并发的基于tcp协议的多人聊天

    上面作业等讲完整理

  • 相关阅读:
    POJ 2376 Cleaning Shifts 贪心
    POJ 2376 Cleaning Shifts 贪心
    魔咒词典 HDU
    2019第十届蓝桥杯C/C++ A组省赛 —— 第三题: 最大降雨量
    2019第十届蓝桥杯C/C++ A组省赛 —— 第二题: 数列求值
    2019第十届蓝桥杯C/C++ A组省赛 —— 第二题: 数列求值
    2019第十届蓝桥杯C/C++ A组省赛 —— 第一题:平方和
    2019第十届蓝桥杯C/C++ A组省赛 —— 第一题:平方和
    2015年第六届蓝桥杯C/C++ A组国赛 —— 第五题:切开字符串
    2015年第六届蓝桥杯C/C++ A组国赛 —— 第五题:切开字符串
  • 原文地址:https://www.cnblogs.com/baili-luoyun/p/10311358.html
Copyright © 2011-2022 走看看