python socket 的理解(1)
前言
socket的用法简单,但里面的概念有点模糊,记录自己本人的一点理解。
socket层结构图

注意,从此图中看出socket处于tcp和应用层之间。那么它代表啥意思呢?简明的说,数据的传输都是底层协议处理的,跟socket没啥关系。sokcet被抽象成文件,意味着socket就干两件事,读和写。
socket 函数
recv函数
1.接收缓冲区接收数据,如果检测到无数据,或正在接收,就一直等待。
2.当协议接收完毕,recv就copy接收缓冲区的数据到buf,如果recv缓冲区较大,recv要不停的copy几次。
注意:在这里,我们把缓冲区想象成一个完成的文件,recv(100),相当于python open对象方法的read(100),如果文件大小1000,每次读100,下次就会从上一次100处开始继续读。
3.当网络中断,recv返回一个长度为0的字符
总结
参考文献
socket send函数和recv函数详解 https://blog.csdn.net/chenhuajie123/article/details/9149185
简单理解socket https://www.cnblogs.com/dolphinX/p/3460545.html
100行代码实现的tcp反向代理 http://voorloopnul.com/blog/a-python-proxy-in-less-than-100-lines-of-code/
python socket 的理解(1)的更多相关文章
- Python Socket 编程——聊天室示例程序
上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和客户端的代码了解基本的 Python Socket 编程模型.本文再通过一个例子来加强一下对 Socket 编程的 ...
- Python Socket,How to Create Socket Cilent? - 网络编程实例
文章出自:Python socket – network programming tutorial by Silver Moon 原创译文,如有版权问题请联系删除. Network programin ...
- Python Socket单线程+阻塞模式
Python之旅]第五篇(二):Python Socket单线程+阻塞模式 python Socket单线程 Socket阻塞模式 串行发送 摘要: 前面第五篇(一)中的一个Socket例子其实就是 ...
- python socket编程---从使用Python开发一个Socket示例说到开发者的思维和习惯问题
今天主要说的是一个开发者的思维和习惯问题. 思维包括编程的思维和解决一个具体问题的分析思维,分析思路,分析方法,甚至是分析工具. 无论是好习惯还是不好的习惯,都是在者一天一天的思维中形成的.那些不好的 ...
- Python Socket 编程示例 Echo Server
简评:我们已经从「Python Socket 编程概览」了解了 socket API 的概述以及客户端和服务器的通信方式,接下来让我们创建第一个客户端和服务器,我们将从一个简单的实现开始,服务器将简单 ...
- Python Socket 编程——聊天室演示样例程序
上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和client的代码了解主要的 Python Socket 编程模型.本文再通过一个样例来加强一下对 Socket ...
- Python Socket 网络编程
Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ ...
- linux中socket的理解
对linux中socket的理解 一.socket 一般来说socket有一个别名也叫做套接字. socket起源于Unix,都可以用“打开open –> 读写write/read –> ...
- python socket发送魔法包网络唤醒开机.py
python socket发送魔法包网络唤醒开机.py 现在的电脑应该都普遍支持有线网络的WOL了,支持无线网络唤醒的电脑,可能比较少. """ python socke ...
随机推荐
- Eclipse使用maven创建SSM-web项目
1.环境准备 (1)maven:apache-maven-3.5.2,我的maven安装在D:\apache-maven-3.5.2,eclipse中maven配置如下: 先add ,添加好自己的ma ...
- 历时小半年总结之JAVA
一.JavaSE 1.多线程 (1).进程与线程的区别? 答:进程是所有线程的集合,每一个线程是进程中的一条执行路径,线程只是一条执行路径. (2).为什么要用多线程? 答:提高程序效率 (3).多线 ...
- Xcode编辑器之filter查找功能和查看最近修改的文件
一,前言 有时候,我们的项目过大,创建类过多就会造成“目标文件”不好查找.这时候通过“filter”进行目录结构筛选无疑是最好的选择. 二,什么是filiter filiter 顾名思义为“过滤”,“ ...
- Airtest断言方法
1,第一种断言方式:验证UI界面 a.存在 b.不存在 2,断言第二种方式:验证数值 assert_equal:断言相等 assert_not_equal:断言不等 3,我发现Airtest一个bug ...
- loj#2333 「JOI 2017 Final」准高速电车
分析 我们发现到达一个点一定是先快车再准快车再慢车 于是快车将1-n分为多个区间 每次取出每个区间当前能到达的点的数量 选剩余时间贡献最大的的一个取得贡献并且再能到达的最远点建立准快车 代码 #inc ...
- druid spring监控配置
方法一: <bean id="seckillServiceImpl" class="org.seckill.service.impl.SeckillServiceI ...
- Invalid bound statement (not found)--spring boot集成mybatis
问题: {"timestamp":"2019-07-02T10:21:32.379+0000","status":500,"err ...
- 使用eclipse制作war包方法 web项目打包到tomcat
打开eclipse在左侧右击项目名选择“Export” 在导出画面点击 “Web”->“WAR file”点击“Next” 点击“Browse…”选择文件的导出位置,Target run ...
- 解读:nginx的一个神秘配置worker_cpu_affinity
今天在查看nginx的相关知识的时候发现了一个nginx之前不认识的配置:worker_cpu_affinity. nginx默认是没有开启利用多核cpu的配置的.需要通过增加worker_cpu_a ...
- Win7 VS2019安装后创建C++工程失败解决
VS2019正式上手,第1个问题创建不了工程,看起来非常类似之前VS2017更新 解决办法 https://github.com/Microsoft/msbuild/issues/4286 和上次的问 ...