总结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协议的多人聊天

上面作业等讲完整理

原文地址:https://www.cnblogs.com/baili-luoyun/p/10311358.html