zoukankan      html  css  js  c++  java
  • 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()
  • 相关阅读:
    BZOJ 1014 火星人prefix
    BZOJ 1013 球形空间产生器
    BZOJ 1012 最大数
    BZOJ 1011 遥远的行星
    BZOJ 1010 玩具装箱
    BZOJ 1009 GT考试
    BZOJ 1008 越狱
    BZOJ 1007 水平可见直线
    BZOJ 1006 神奇的国度
    Luogu 1450 [HAOI2008]硬币购物
  • 原文地址:https://www.cnblogs.com/zhangtengccie/p/10362742.html
Copyright © 2011-2022 走看看