最近在看 Python的视频,针对socket 编程做一个笔记

一、socket是什么?

socket 通常也称为“套接字”,用于描述 IP 地址和端口,是一个通讯链的句柄。应用程序通常通过 “套接字”向网络发出请求或者应答网络请求。说白了,就是一种通讯机制。它类似于公司的电话客服部门,你打电话的时候,那边会分配一个人回答你的问题,客服部门就相当于 socket 的服务器端了,打电话的人相当于客户端了,在和你通话结束前,如果有人在想找和你通话的哪个客服人员,是不可能的,因为你在和他通话,当然客户部门的电话交换机也不会重复分配。

socket 起源于 Unix,而Unix/Linux 基本哲学之一就是“一切皆文件”,都可以用 “打开open ->读写 wirte/read  -> 关闭 close “模式来操作。 Socket就是该模式的一个实现, socket即时一种特殊的文件,一些 socket函数就是对其进行操作(读/写IO、打开、关闭)

socket 的工作模式

Socket 服务器端 编程主要包括以下几步

打开 socket

绑定到一个地址和端口

侦听进来的连接

接受连接

读取数据

Socket type

socket.AF_UNIX 只能够用于单一的 Unix 系统进程间通信

socket.AF_INET 服务器之间网络通信

socket.AF_INET6 IPv6

socket.SOCK_STREAM 流式socket,for TCP

socket.SOCK_DGRAM 数据报式socket, for UDP

socket.SOCK_RAW 原始套接字,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以;其次,SOCK_RAW也可以处理特殊的IPv4报文,此外,利用原始套接字,可以通过 IP_HDRINCL套接字选项由用户构造IP头

socket.SOCK_RDM 是一种可靠的UDP形式,即保证交付数据报但不保证顺序。SOCK_RDM用来提供对原始协议的低级访问,在需要执行某些特殊操作时使用,如发送ICMP报文。

SOCK_RAM 通常仅限于高级用户或管理员运行的程序使用

socket.SOCK_SEQPACKET 可靠的连续数据包服务

Socket 函数

socket(family,type[,protocal]) 使用给定的地址族、套接字类型、协议编号(默认为0)来创建套接字

套接字的实例具有以下方法:

1、s.bind(address) 将套接字绑定到地址。address地址的格式取决于 地址族。 在AF_INET下,以元祖(host,port)的形式表示地址2、s.listen(backlog) 开始监听传入连接。backlog指定在拒绝连接之前,操作系统可以挂起的最大连接数量。该值至少为1,大部分应用程序设置为5就可以了。3、s.connect(address) 连接到address 处额套接字,一般,address的格式为元组(hostname,port),如果连接同一台机器上的服务器,可以将hostname 设置为 ‘localhost’. 如果连接出错,返回 socket.error 错误。4、s.connect_ex(address) 功能与 connect(address) 相同,但是成功返回 0,失败返回 errno 的值。5、s.accept() 接受连接并返回(conn,address),其中conn是新的套接字对象,可以用来接收和发送数据,address时候连接客户端的地址。6、s.close() 关闭套接字。7、s.fileno() 返回套接字的文件描述符8、s.getpeername() 返回套接字的远程地址。返回值通常是元组(ipaddr,port)9、s.getsockname() 返回套接字自己的地址。通常是一个元组(ipaddr,port)10、s.getsockopt(level,optname[,buflen]) 返回套接字选项的值11、s.gettimeoout() 返回当前超时期的值,单位是秒,如果没有设置超时期,则返回None12、s.recv(bufsize [,flag]) 接受套接字的数据。数据以字符串形式返回,bufsize 指定要接受的最大数据量。flag 提供有关信息的其他信息,通常可以忽略。13、s.recvfrom(bufsize [,flag]) 与 recv() 类似,但返回值是(data,address)。其中data是包含接收数据的字符串,address是发送数据的套接字地址14、s.send(string [,flag]) 将 string 中的数据发送到连接的套接字,返回值是要发送的字节数量,该数量可能小于 string的字节大小。15、s.sendall(string [,flag]) 将 string中的数据发送到连接的套接字,但在返回之前会尝试发送所有数据。成功为None,失败则抛出异常16、s.sendto(string[,flag],address) 将数据发送给套接字,address是形式为(ipaddr,port)的元组,指定远程地址。返回值是发送的字节数。该函数主要用于UDP协议17、s.setblocking(flag) 如果flag为0,则将套接字设为非阻塞模式,否则将套接字设置为阻塞模式(默认值)。非阻塞模式下,如果调用 recv() 没有发现任何数据,或 send() 调用无法立即发送数据,那么将引起 socket.error 异常18、s.setsocketopt(level,optname,value) 设置给定套接字选项的值19、s.settimeout(timeout) 设置套接字操作的超时期,timeout 是一个浮点数,单位是秒。值为 None 表示没有超时期。一般,超时期应该在刚创建套接字的时候后设置,因为他们可能用于连接的操作(如 connect())

python socket recvfrom_Python socket学习笔记(一)相关推荐

  1. 36篇博文带你学完opencv :python+opencv进阶版学习笔记目录

    基础版学习笔记传送门 36篇博文带你学完opencv :python3+opencv学习笔记汇总目录(基础版) 进阶版笔记 项目 opencv进阶学习笔记1: 调用摄像头用法大全(打开摄像头,打开摄像 ...

  2. Python中索引的学习笔记

    1 前言 今天在学习FaceBoxes- 看到一个比较奇怪的代码,"order = scores.argsort()[::-1][:args.top_k]",不太懂这个" ...

  3. Python地理做图——学习笔记

    Python地理做图--学习笔记 GMT 绘制海岸线 绘制地形并叠加海岸线 地理信息数据格式在线转换网址 适用OSGEO4w可以实现tif转nc,转grd 绘制grd和nc 除了投影方式-X, gmt ...

  4. 基于python的数字图像处理--学习笔记(三)

    基于python的数字图像处理--学习笔记(三) 前言 一.灰度拉伸 二.幂律(伽马)变换 三.对数变换 前言 进入冈萨雷斯的第三章内容,并用python实现功能.我更改了代码源,之前找到太烂了,代码 ...

  5. Python第三方库pygame学习笔记(一)

    Pygame Python最经典的2D游戏开发第三方库,也支持3D游戏开发 Pygame适合用于游戏逻辑验证.游戏入门及系统演示验证 Pygame是一种游戏开发引擎,基本逻辑具有参考价值 pygame ...

  6. python气象数据可视化学习笔记6——利用python地图库cnmaps绘制地图填色图并白化

    文章目录 1. 效果图 2. cnmaps简介及安装 2.1 写在前面 2.2 cnmaps简介和安装 3. 导入库 4. 定义绘图函数 4.1 使用get_adm_maps返回地图边界 4.2 ax ...

  7. Python快速编程入门#学习笔记01# |第一章 :Python基础知识 (Python发展历程、常见的开发工具、import模块导入)

    全文目录 ==先导知识== 1 认识Python 1.1.1 Python的发展历程 1.1.2 Python语言的特点 2. Python解释器的安装与Python程序运行 1.2.1 安装Pyth ...

  8. Python+cplex运筹优化学习笔记(三)-营养膳食选择

    Python+cplex运筹优化学习笔记(三)-营养膳食选择 前言 首先呢,说明一下,本文只是自己在学习过程中运用到的例子,然后规整总结一下,随便写写自己所做的一些笔记.小白学习,有不对的地方还望大家 ...

  9. 全国计算机等级考试二级Python精品题库学习笔记1

    全国计算机等级考试二级Python精品题库学习笔记1 精品试卷01 精品试卷01程序题 基本操作题 2:随机验证码 基本操作题 3:比赛成绩计算 Turtle 绘图题:同心圆 简单应用题 2:员工工资 ...

  10. Python快速编程入门#学习笔记03# |第二章 :Python基础(代码格式、标识符关键字、变量和数据类型、数字类型以及运算符)

    全文目录 ==先导知识== 学习目标: 2.1 代码格式 2.1.1 注释 2.1.2 缩进 2.1.3 语句换行 2.2 标识符和关键字 2.2.1 标识符 2.2.2 关键字 2.3 变量和数据类 ...

最新文章

  1. anaconda降级python失败_如何降级Python版本安装spyder?
  2. Xcode 报错Could not find developer disk image,iOS10
  3. oracle数据库简单操作
  4. python学习笔记(四)、条件、循环及其他语句
  5. ASCX呼叫ASPX.CS的方法
  6. offsetLeft 解析
  7. PHP curl采集
  8. 傅立叶变换是如何改变我们生活的? ——四个角度告诉你答案
  9. nssl1216-码灵鼠【数学】
  10. php定义object数据类型,PHP数据类型(4):对象object
  11. html 新浪博客,html
  12. Silverlight 2 控件 SDK 源代码
  13. 中通科技移动自动化测试的革新与探索
  14. Spark RDD Action
  15. C - Watchmen
  16. Oracle数据库索引使用及索引失效总结
  17. 使用FlashFTP上传文件到指定服务器
  18. Linux调试工具之readelf
  19. 用Eclipse的TaskList功能进行任务管理(提高工作效率)
  20. 用excel制作双层饼图_Excel 怎么用环形图制作双层饼图,excle饼状图图的制作

热门文章

  1. java常见性能优化_十大最常见的Java性能问题
  2. hibernate连接泄露_泄漏抽象,或如何正确地与Hibernate绑定Oracle DATE
  3. eclipse扩展点_Eclipse扩展点评估变得容易
  4. 前6个最常用的Redis库
  5. Java的原始字符串文字
  6. 我们相信加密! 教程
  7. SpringOne Platform 2016回顾
  8. 将Java 8日期时间API与JSF和Java EE 7结合使用
  9. 一行中的Java 8 Lambda
  10. 集成CDI和WebSockets