• Python9-网络编程4-day33


    解决黏包问题:
    在传输大量数据之前,先告诉接收端要发送数据大小
    如果想更漂亮的解决问题,可以通过struct模块来定制协议
    为什么会出现黏包现象:
    首先只有在tcp协议中才会出现黏包现象
    是因为tcp协议是面向流的协议
    在发送的数据传输的过程中还有缓存机制来避免数据丢失
    因此 在连续发送小数据的时候,以及接受大小不符的时候都容易出现黏包现象
    本质还是因为我们在接受数据的时候不知道发送的数据长短
    struck模块
    pack unpack
    模式:i
    pack之后的长度:4个字节
    unpack之后拿到的数据是一个元祖:元祖的第一个元素才是pack的值

    #server
    import socketserver
    class MyServer(socketserver.BaseRequestHandler):
        def handle(self):   #self.request 就相当于conn
            while True:
                msg =  self.request.recv(1024).decode('utf-8')
                if msg == 'q':
                    # self.request.close()
                    break
                print(msg)
                info = input('>>>>')
                self.request.send(info.encode('utf-8'))
    
    if __name__ == '__main__':
        server = socketserver.ThreadingTCPServer(('127.0.0.1',8080),MyServer)
        #thread线程
        server.serve_forever()
    
    
    
    #client
    import socket
    sk = socket.socket()
    sk.connect(('127.0.0.1',8080))
    while True:
        msg = input('>>>>')
        if msg == 'q':
            break
        sk.send(('大众点评 :'+msg).encode('utf-8'))
        ret = sk.recv(1024).decode('utf-8')
        print(ret)
    sk.close()
  • 相关阅读:
    R语言数据框部分笔记
    R语言数组部分的笔记
    R语言向量部分的笔记
    计算机等级考试二级python 第二章 python的基本语法元素
    计算机二级教程python第一章 程序设计语言
    Linux C实现发邮件功能
    telnet收发邮件
    Linux进(线)程同步各种锁
    About Mutex
    wait()与waitpid()与pthread_join()
  • 原文地址:https://www.cnblogs.com/zhangtengccie/p/10362742.html
Copyright © 2020-2023  润新知