zoukankan      html  css  js  c++  java
  • socket套接字通信和粘包问题

    socket套接字通信:

    什么是socket?

    socket是一个模块,又称套接字,用来封装互联网协议(应用层以下的层)。

    为什么要有socket?

    socket可以实现 互联网协议 应用层以下的层的工作

    -提高开发效率

    怎么使用socket?

    import socket

    写socket套接字:

    Client

    Server

    server.py
    #服务端
    import socket
    #获取手机
    server = socket.socket()
    #绑定ip地址,port端口
    server.bind(('127.0.0.1',8500))
    #半连接池
    server.listen(5)#最多5个人坐椅子,实际上==6
    print('server is running')
    while True:
    #conn为通道 ,等待电话的接入
        conn,addr = server.accept()
        print(addr)
        while True:
            try:
                #接听对方假话的内容
                #data客户端发送过来的消息
                date = conn.recv(1024)
                print(date.decode('utf-8'))
                if len(date) == 0:
                    break
                if date.decode('utf-8') == 'q':
                    break
                send_date = input("服务端>>:")
                #服务端往客户端发送消息
                conn.send(send_date.encode('utf-8'))
            except Exception as e:
                print(e)
                break
    client.py
    #客户端
    import socket
    #买手机
    client = socket.socket()
    #拨号 connect为连接
    client.connect(('127.0.0.1',8500))#客户端的ip与port必须与服务端一致
    print('client is running')
    while True:
        send_date = input("客户端>>:")
        #必须发送bytes类型的数据
        client.send(send_date.encode('utf-8'))
        #接受date的数据
        date = client.recv(1024)
        if date.decode('utf-8') == 'q':
            break
        if len(date) == 0:
            break
        print(date.decode('utf-8'))
    client.close()

    粘包

      1)问题:无法确认对方发送过来数据的大小。

      2)问题:在发送数据间隔短并且数据量小的情况下,

      会将所有数据一次性发送

      确认:确认对方数据的大小

    解决粘包问题(struct模块

      -无论哪一端先发送数据

        -客户端

        1)先制作报头,并发送(struct)

        2)发送真实数据

      -服务端:

        1)接受报头,并解包获取 真实数据长度

        2)根据真实数据长度 接受真实数据

        recv(真实数据长度)

     

  • 相关阅读:
    转:Nginx 日志文件切割
    nginx日志切割
    nginx日志配置
    Mongodb数据更新命令
    Android开发书籍推荐
    全面解读python web 程序的9种部署方式
    PowerDesinger15设置字体大小
    A* Pathfinding Project (Unity A*寻路插件) 使用教程
    jQuery的DOM操作之捕获和设置
    如何写一个好的方法
  • 原文地址:https://www.cnblogs.com/lvguchujiu/p/11991677.html
Copyright © 2011-2022 走看看