网络编程 socket与黏包
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与黏包相关推荐
- go net.conn读取请求头信息_go语言网络编程socket sever的实现
首先说一下socket,网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket(百度百科). 图片来源于网络 其本质就是就是编程接口(API),对TCP.UDP的封装 ...
- Java网络编程 Socket、ServerSocket 详解,方法介绍及完整代码示例
Java网络编程 Socket.ServerSocket 详解,方法介绍及完整代码示例 概念 什么是网络编程? 网络编程是指编写运行在多个设备(计算机)的程序,这些设备通过网络连接起来.当这些通过网络 ...
- Python网络编程socket
网络编程之socket 看到本篇文章的题目是不是很疑惑,what is this?,不要着急,但是记住一说网络编程,你就想socket,socket是实现网络编程的工具,那么什么是socket,什么是 ...
- Linux 网络编程——socket 网络编程
文章目录 一.网络基础 TCP/UDP对比 TCP/IP协议族体系 socket IP地址 IP地址转化API inet_addr() inet_aton() inet_ntoa() inet_pto ...
- 树莓派:入门(基础配置、GPIO、网络编程 Socket)
树莓派在创客中越来越发挥重要的作用,树莓派的强大兼用性和功能丰富,得到 DIY 朋友的青睐.带大家认识目前最新的树莓派 3B+,从零基础到入门,到动手做有趣的应用. 本场 Chat 首先会带领大家入门 ...
- java网络编程socket\server\TCP笔记(转)
java网络编程socket\server\TCP笔记(转) 2012-12-14 08:30:04| 分类: Socket | 标签:java |举报|字号 订阅 1 TCP的开销 a 连接 ...
- Python网络编程(Socket)
Python网络编程(Socket) Python提供了两个访问级别的网络服务.在一个较低的水平,您可以访问底层操作系统的基本套接字支持,允许你实现面向连接和无连接协议的客户端和服务器 Python有 ...
- 健壮的网络编程IO函数-RIO包
RIO包 简介 Rio包即为Robust io函数包.包中函数是对Linux基本I/O函数的封装,使其更加健壮.高效,更适用于网络编程. 分析 Rio包由rio_t结构体和系列函数组成. 首先是两个不 ...
- 网络编程socket之connect函数
网络编程socket api存在一批核心接口,而这一批核心接口就是几个看似简单的函数,尽管实际上这些函数没有一个是简单.connect函数就是这些核心接口的一个函数,它完成主动连接的过程. conne ...
最新文章
- java集合对象声明_Java基础————集合类
- html下拉框换行,HTML列表框换行文本
- MongoDB 与传统数据库的对比
- 【转】iOS的APP资源,开源的哦
- 简单粗暴入门JAVA之方法
- 震惊!程序员一夜赚1W,没想到他就做了这个..........
- 名字打架 源码 php,无聊发天蝎与各星座名字打架结果
- 软件测试常见面试题分享
- python demo.py_python,pycharm_【已解决】pycharm 运行 web.py demo文件问题,python,pycharm - phpStudy...
- 第五届强网杯全国网络安全挑战赛writeup
- mac虚拟机改显存_不同mac虚拟机下性能表现对比
- linux内核协议栈 TCP选项之SACK选项的接收Ⅰ
- CentOS 7 下的软件安装方法及策略
- Error at hooking API “LoadStringA“ Dump first 32 bytes:
- data单复数一样吗_data和datum谁是单数形式,谁是复数形式?
- Nextcloud基本使用方法
- matlab nag 工具箱,matlab 数值算法工具箱 NAG toolbox
- 从零开始搭建仿抖音短视频App--项目介绍和架构设计演示
- Vue3-uniapp上传图片到七牛云(身份证信息)
- 海龟交易法操作商品期货
热门文章
- PHP基于phpqrcode类生成二维码的方法详解
- 单片机spwm c语言程序,基于单片机SPWM简易逆变电路及程序设计
- python[10918:300960] modalSession has been exited prematurely - check for a reentrant call to endMod
- Permission denial: writing to settings requires:android.permission.WRITE_SECURE_SETTINGS
- CSDN积分兑换链接
- 【信息收集】用python获取网站权重(四)
- 塑料模具设计需要注意哪些?新手必收藏!!!
- TCP的流量窗口……看完笑出鹅叫声
- (14)C#ADO.NET 关于MD5加密的登录框
- 腾讯云短信发送(php - think PHP 6)