TCP协议与UDP协议


TCP协议与UDP协议是数据传输时使用的协议之二,协议规定了数据传输所遵循的规则,不同协议有不同的传输规则。

TCP协议的流程

TCP协议的流程简单概况一下就是‘三次握手,四次挥手’

‘三次握手’的流程

1.客户端往服务端发送建立数据通道请求

2.服务端接收并同意请求,然后往客户端发送建立数据通道请求

3.客户端接收并同意请求

(由于数据通道是单向的,所以需要双向建立数据通道才能相互传递信息)

‘四次挥手’的流程

1.客户端往服务端发送断开数据通道请求

2.服务端接收并同意请求

3.服务端往客户端发送断开数据通道请求

4.客户端接收并同意请求

(由于断开链接需要检查时间,所以中间的流程不能合并)

UDP协议的流程

UDP协议的流程没有任何的通道也没有任何的限制,直接发送消息给目标。

缺点是不安全,消息可能被截胡,也没有反馈

socket套接字


socket套接字用于多个应用程序之间通讯,而通讯分本地应用程序通讯和网络应用程序通讯

基于文件类型的套接字家族
    套接字家族的名字:AF_UNIX
基于网络类型的套接字家族
    套接字家族的名字:AF_INET

socket服务端链接模板

import socket                       # socket模块是python内置模块server = socket.socket()            # 创建一个socket对象,括号内输入传输协议类型,默认TCP协议server.bind(('127.0.0.1', 8080))    # 绑定一个ip地址,127.0.0.1是本地计算机地址server.listen(5)                    # 半连接池,用于缓冲sock = server.accept()              # 打开端口,等待链接(可打开多个端口)sock.send(b'发送数据给客户端')       # 发送数据
sock.recv(1024)                     # 设置可接收数据的最大字节大小,单位是bytessock.close                          # 关闭接口
server.close                        # 关闭服务端

socket客户端链接模板

import socketclient = socket.socket()                # 创建socket对象client.connect(('127.0.0.1', 8080))     # 链接服务端client.recv(1024)                       # 接收服务端的数据,设置最大接收字节大小client.send(b'发送数据给服务端')         # 发送数据给服务端client.close()                          # 关闭客户端

客户端与服务端的要点

1.必须先启动服务端再运行客户端

2.同一程序同一时间无法同时充当服务端与客户端

半连接池

server.listen(5)

服务端虽然处理数据速度很快,但也无法同时处理多个客户端的数据,如果当前正在处理一个客户端的数据时,其他客户端接进数据通道,那么其他客户端会在半连接池里等待,当前数据处理完毕后按顺序从半连接池内开始,括号内的数字就是半连接池中可容纳客户端的上限。

黏包


在TCP协议发送数据时,如果监测到多个将要发送的数据距离很近,那么会进行缓冲,将这些数据一起发送,发送端需要等缓冲区满才发送出去,而接收方不知道消息发送间隔,不知道一次性会发送多少数据来,这种现象叫做黏包。

黏包的解决方法

import structinfo = '这是一段比较长的数据字段'res = struct.pack('i', len(info))print(len(res))

struct模块可以将一段字符打包,无论长度多少,都会统一打包成固定长度4bytes,用来压缩数据,还可以使用unpack来解压。

struct模块的缺点是太大的数据无法打包

网络编程 socket与黏包相关推荐

  1. go net.conn读取请求头信息_go语言网络编程socket sever的实现

    首先说一下socket,网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket(百度百科). 图片来源于网络 其本质就是就是编程接口(API),对TCP.UDP的封装 ...

  2. Java网络编程 Socket、ServerSocket 详解,方法介绍及完整代码示例

    Java网络编程 Socket.ServerSocket 详解,方法介绍及完整代码示例 概念 什么是网络编程? 网络编程是指编写运行在多个设备(计算机)的程序,这些设备通过网络连接起来.当这些通过网络 ...

  3. Python网络编程socket

    网络编程之socket 看到本篇文章的题目是不是很疑惑,what is this?,不要着急,但是记住一说网络编程,你就想socket,socket是实现网络编程的工具,那么什么是socket,什么是 ...

  4. Linux 网络编程——socket 网络编程

    文章目录 一.网络基础 TCP/UDP对比 TCP/IP协议族体系 socket IP地址 IP地址转化API inet_addr() inet_aton() inet_ntoa() inet_pto ...

  5. 树莓派:入门(基础配置、GPIO、网络编程 Socket)

    树莓派在创客中越来越发挥重要的作用,树莓派的强大兼用性和功能丰富,得到 DIY 朋友的青睐.带大家认识目前最新的树莓派 3B+,从零基础到入门,到动手做有趣的应用. 本场 Chat 首先会带领大家入门 ...

  6. java网络编程socket\server\TCP笔记(转)

    java网络编程socket\server\TCP笔记(转) 2012-12-14 08:30:04|  分类: Socket |  标签:java  |举报|字号 订阅 1 TCP的开销 a  连接 ...

  7. Python网络编程(Socket)

    Python网络编程(Socket) Python提供了两个访问级别的网络服务.在一个较低的水平,您可以访问底层操作系统的基本套接字支持,允许你实现面向连接和无连接协议的客户端和服务器 Python有 ...

  8. 健壮的网络编程IO函数-RIO包

    RIO包 简介 Rio包即为Robust io函数包.包中函数是对Linux基本I/O函数的封装,使其更加健壮.高效,更适用于网络编程. 分析 Rio包由rio_t结构体和系列函数组成. 首先是两个不 ...

  9. 网络编程socket之connect函数

    网络编程socket api存在一批核心接口,而这一批核心接口就是几个看似简单的函数,尽管实际上这些函数没有一个是简单.connect函数就是这些核心接口的一个函数,它完成主动连接的过程. conne ...

最新文章

  1. java集合对象声明_Java基础————集合类
  2. html下拉框换行,HTML列表框换行文本
  3. MongoDB 与传统数据库的对比
  4. 【转】iOS的APP资源,开源的哦
  5. 简单粗暴入门JAVA之方法
  6. 震惊!程序员一夜赚1W,没想到他就做了这个..........
  7. 名字打架 源码 php,无聊发天蝎与各星座名字打架结果
  8. 软件测试常见面试题分享
  9. python demo.py_python,pycharm_【已解决】pycharm 运行 web.py demo文件问题,python,pycharm - phpStudy...
  10. 第五届强网杯全国网络安全挑战赛writeup
  11. mac虚拟机改显存_不同mac虚拟机下性能表现对比
  12. linux内核协议栈 TCP选项之SACK选项的接收Ⅰ
  13. CentOS 7 下的软件安装方法及策略
  14. Error at hooking API “LoadStringA“ Dump first 32 bytes:
  15. data单复数一样吗_data和datum谁是单数形式,谁是复数形式?
  16. Nextcloud基本使用方法
  17. matlab nag 工具箱,matlab 数值算法工具箱 NAG toolbox
  18. 从零开始搭建仿抖音短视频App--项目介绍和架构设计演示
  19. Vue3-uniapp上传图片到七牛云(身份证信息)
  20. 海龟交易法操作商品期货

热门文章

  1. PHP基于phpqrcode类生成二维码的方法详解
  2. 单片机spwm c语言程序,基于单片机SPWM简易逆变电路及程序设计
  3. python[10918:300960] modalSession has been exited prematurely - check for a reentrant call to endMod
  4. Permission denial: writing to settings requires:android.permission.WRITE_SECURE_SETTINGS
  5. CSDN积分兑换链接
  6. 【信息收集】用python获取网站权重(四)
  7. 塑料模具设计需要注意哪些?新手必收藏!!!
  8. TCP的流量窗口……看完笑出鹅叫声
  9. (14)C#ADO.NET 关于MD5加密的登录框
  10. 腾讯云短信发送(php - think PHP 6)