zoukankan      html  css  js  c++  java
  • 网络编程(二)

    网络编程(二)

    解决粘包问题

    粘包主要问题是,服务端第一次发送数据,客户端无法精确一次性接受完毕,下一次发送的数据与上一次数据粘在一起.

    1. 无法预测对方需要接收的数据大小长度.
    2. 多次连续发送数据量小,并且时间间隔短的数据一次性打包发送

    ==缺点==:程序的运行速度远快于网络传输速度,所以在发送一段字节前,先用send去发送该字节流长度,这种方式会放大网络延迟带来的性能损耗.

    TCP:

    ​ TCP是一个流式协议,会将多次连续发送数据量小,并且时间间隔短的一次性打包发送.

    struct模块:

    必须先定义报头,发送报头,再发送真实数据.

    即想发送文件,又想发送文件的描述信息.

    客户端发送字典给服务端

    send_dic={file_name:文件名

    ​ file_size:文件的真是长度1000000}

    通过json模块序列化成bytes数据

    json_data = json.dumps(send_dic)

    bytes_data=json_data.encode('utf8')#bytes

    先获取字典的报头

    header=struct.pack('i',len(bytes_data))

    print(header)

    服务端接收到字典,并接受文件的真实数据

    res = struct.unpack('i', header)[0]
    print(res)
    

    上传大文件

    客户端往服务端上传文件

    UDP简单使用

    UDP:

    ​ UDP是一种传输协议.

    ​ 1. 不需要建立双向管道

    1. 不会粘包

    2. 客户端给服务端发送数据,不需要等待服务端返回接收成功

    3. 数据容易丢失,数据不安全.

      TCP:就好比在打电话.

      UDP:就好比在发短信.

    基于UDP实现QQ聊天室

    由于UDP无连接,所以可以同时多个客户端去跟服务端通信

    socket server

    ​ python内置模块,可以简化socket套接字服务端的代码.

    ​ 简化TCP与UDP服务端代码

    ​ 必须要创建一个类

    我把月亮戳到天上 天就是我的 我把脚踩入地里 地就是我的 我亲吻你 你就是我的
  • 相关阅读:
    js 数组详解(javascript array)
    CentOS 修改IP地址, DNS, 网关
    Leetcode 652.寻找重复的子树
    Leetcode 650.只有两个键的键盘
    Leetcode 649.Dota2参议院
    Leetcode 648.单词替换
    Leetcode 647.回文子串
    Leetcode 645.最长数对链
    Leetcode 643.子数组最大平均数I
    Leetcode 640.求解方程
  • 原文地址:https://www.cnblogs.com/zhulipeng-1998/p/12863937.html
Copyright © 2011-2022 走看看