将上节中的C#该成Python版的容易程度大大超出了我的意料之外。从来没有发现,仅仅用灰尘简单的几句话就实现了该程序的主要功能,可见python的简易和强大之处。这里先对SocketAPI 做一下总结。

Socket API 笔记(PythonSocket API 详见这里

1、Socket的地址表示

  • 单独的字符串,用于AF_UNIX地址族
  • (host,port)对,用于AF_INET地址族。其中host是一字符串,可以是‘www.google.com’ 域名形式或是‘203.208.46.180’这种ipv4地址的形式;port是一整数。
  • (host,port,flowinfo,scopeid)四元组(4-tuple),用于AF_INET6地址族
 

2、错误与异常

所有的错误都将引发异常。一般的异常有如 invalidargument type 或是 out-of-memoryconditions。与socket或地址语义相关的错误将引发socket.error异常。与Socket相关的异常有:

  • socket.error:由Socket相关错误引发
  • socket.herror:由地址相关错误引发
  • socket.gaierror:由地址相关错误,如getaddrinfo()或getnameinfo()引发
  • socket.timeout:当socket出现超时时引发。超时时间由settimeout()提前设定

(与异常相伴的错误信息请查阅API说明)

3、常用函数

  • socket.has_ipv6:判断平台是否支持IPV6
  • socket.create_connection(address[,timeout[, source_address]]):
    创建一个正在监听的地址,并返回Socket对象
  • socket.getaddrinfo(host,port, family=0, socktype=0, proto=0, flags=0):
    返回一个包含5元组的list,用来获得host的地址信息
  • socket.gethostbyname(hostname):
    将host主机名转换为ipv4地址
  • socket.gethostbyname_ex(hostname):根据hostname获取一个主机关于IP和名称的全面的信息。
    功能扩展的gethostbyname函数,返回主机名、主机别名列表、主机IP地址列表
  • socket.gethostname():返回python解释器运行的机器hostname,返回当前主机名
  • socket.gethostbyaddr(ip_address):
    通过ip地址,返回包括主机名的三元组:(hostname, aliaslist, ipaddrlist)
  • socket.getnameinfo(sockaddr,flags):
  • socket.getprotobyname(protocolname):
  • socket.getservbyname(servicename[,protocolname]):
    通过给定的服务名,协议名,返回该服务所在的端口号
  • socket.getservbyport(port[,protocolname]):
    返回该端口号的服务名,如‘80’:‘http’
  • socket.socket([family[,type[, proto]]]):
    通过给定的地址族,socket类型和端口号,创建新的Socket。默认地址族为AF_INET,socket类型为SOCK_STREAM,端口号为0或省略
  • socket.socketpair([family[,type[, proto]]]):可用平台,unix
  • socket.fromfd(fd, family,type[, proto]):可用平台,unix
  • socket.ntohl(x):将32位正整数从网络字节序转换为机器字节序
  • socket.ntohs(x):将16为正整数从网络字节序转换为机器字节序
  • socket.htonl(x):将32为正整数从机器字节序转换为网络字节序
  • socket.htons(x):将16位正整数从机器字节序转换为网络字节序
    (关于字节序看这里)
  • socket.inet_aton(ip_string):
    将点分十进制字符串ipv4地址形式转化为32位二进制形式,即一个4个字符的字符串,一般用于标准C库函数中的struct_in_addr
  • socket.inet_ntoa(packed_ip):上个函数的反操作
  • socket.inet_pton(address_family,ip_string):类似上述操作,可用平台,部分unix
  • socket.inet_ntop(address_family,packed_ip):类似上述操纵,可用平台,部分unix
  • socket.getdefaulttimeout():返回socket默认超时时间,以秒计(float)
  • socket.setdefaulttimeout(timeout):设置Socket默认超时时间,以秒计(float)
  • socket.SocketType:这是python的类型对象,表示socket的类型

4、Socket对象方法

    • socket.accept():返回(conn,address)对,其中conn是新的socket对象,在其上可以发送和接收数据;address是另一端的socket地址
    • socket.bind(address):将socket绑定到地址上,该socket必须之前没有做过绑定操作
    • socket.close():关闭socket,该socket之后对该socket所做的的所有操作将失败,远端连接将不会收到数据。当虚拟机进行垃圾回收时,该socket将被自动关闭
    • socket.connect(address):连接该地址上的远端Socket
    • socket.connect_ex(address):类似上面操作,但出错时返回错误代码而非触发异常,可以很好的支持异步连接
    • socket.fileno():
    • socket.getpeername():
    • socket.getsockname():返回Socket自己的地址,对查找端口号有用
    • socket.getsockopt(level,optname[, buflen]):
    • socket.ioctl(control,option):可用平台 windows,具体看这里
    • socket.listen(backlog):监听socket连接,参数表示最大连接队列数。该参数与系统有关。通常是5,最小为0
    • socket.makefile([mode[,bufsize]]):返回与socket相关的file对象,FileObjects看这里
    • socket.recv(bufsize[,flags]):接收数据,返回表示接收到数据的String。buffersize表示一次接收到的数据的最大量
    • socket.recvfrom(bufsize[,flags]):接收数据,返回(String ,address)对。
    • socket.recvfrom_into(buffer[,nbytes[,flags]]):接收数据,将其写入参数buffer而非生成字符串。返回(nbyte,address),其中nbyte是接收到的数据量,address是发送端的地址。
    • socket.recv_into(buffer[,nbytes[, flags]]):接收数据,区别于上的是,仅返回nbyte——接收数量,没有地址
    • socket.send(string[,flags]):发送数据,该socket必须与远端socket连接。返回发送的数据量。程序自己负责检查是否所有的数据均已发送,并自己处理未发送数据。
    • socket.sendall(string[,flags]):发送数据。与上函数不同的是,该函数会持续发送数据直到数据发送完毕或出现错误为止。若成功发送,返回none,但当错误发生时,将无法判断发送了多少数据。
    • socket.sendto(string[,flags],address):向socket发送数据,该socket不应该连接远端socket,因为目的socket使用地址表示的。该函数返回发送的数据量
    • socket.setblocking(flag):设置阻塞或非阻塞模式。flag=0时被设置为非阻塞模式,其他为阻塞模式。新建的socket均为阻塞模式。当在非阻塞模式下,如果recv()函数执行中,没有收到任何数据,或是send()函数没有立即处理掉数据,error异常将会被触发;在阻塞模式下,执行函数将被阻塞直到其可以执行。s.setblocking(0)等同于 s.settimeout(0.0),s.setblocking(1)等同于s.settimeout(None)
    • socket.settimeout(value):设置阻塞模式下socket的超时时间,其值可以是非负数的float类型,以秒计,或是None。若给定float,socket的后续操作若在给定超时时间内没有完成,将触发timeout异常;若给定None,则使超时设置失效
    • socket.gettimeout():返回超时时间(float,以秒计)或None
    • socket.setsockopt(level,optname, value):
    • socket.shutdown(how):
    • socket.family:python类型,socket族
    • socket.type:python类型,socket类型
    • socket.proto:python类型,socket协议

Python Socket API 笔记的更多相关文章

  1. python socket编程笔记

    用python实现一个简单的socket网络聊天通讯 (Linux --py2.7平台与windows--py3.6平台) 人生苦短之我用Python篇(socket编程) python之路 sock ...

  2. python - socket通信笔记

    参考: 通过编写聊天程序来熟悉python中多线程和socket的用法:https://www.cnblogs.com/mingjiatang/p/4905395.html python socket ...

  3. TCP协议和socket API 学习笔记

    本文转载至 http://blog.chinaunix.net/uid-16979052-id-3350958.html 分类:  原文地址:TCP协议和socket API 学习笔记 作者:gilb ...

  4. python核心编程--笔记

    python核心编程--笔记 的解释器options: 1.1 –d   提供调试输出 1.2 –O   生成优化的字节码(生成.pyo文件) 1.3 –S   不导入site模块以在启动时查找pyt ...

  5. c#实例化继承类,必须对被继承类的程序集做引用 .net core Redis分布式缓存客户端实现逻辑分析及示例demo 数据库笔记之索引和事务 centos 7下安装python 3.6笔记 你大波哥~ C#开源框架(转载) JSON C# Class Generator ---由json字符串生成C#实体类的工具

    c#实例化继承类,必须对被继承类的程序集做引用   0x00 问题 类型“Model.NewModel”在未被引用的程序集中定义.必须添加对程序集“Model, Version=1.0.0.0, Cu ...

  6. python socket和socketserver

    Python提供了两个基本的socket模块.一个是socket,它提供了标准的BSD Socket API:另一个是socketServer,它提供了服务器中心类,可以简化网络服务器的开发. 下面先 ...

  7. PYTHON SOCKET编程简介

    原文地址: PYTHON SOCKET编程详细介绍   Python 提供了两个基本的 socket 模块. 第一个是 Socket,它提供了标准的 BSD Sockets API. 第二个是 Soc ...

  8. Python Socket 编程详细介绍(转)

    Python 提供了两个基本的 socket 模块: Socket 它提供了标准的BSD Socket API. SocketServer 它提供了服务器重心,可以简化网络服务器的开发. 下面讲解下 ...

  9. Python标准库笔记(11) — Operator模块

    Operator--标准功能性操作符接口. 代码中使用迭代器时,有时必须要为一个简单表达式创建函数.有些情况这些函数可以用一个lambda函数实现,但是对于某些操作,根本没必要去写一个新的函数.因此o ...

随机推荐

  1. 某dp题

    [NOI联考by ysy]庆典 2016年6月17日1,1040 [题目描述] 战狂在昌和帝国的首都法法城召开了庆典,向一万名最杰出的士兵分发了用魔法猪做的猪肉饺子,士兵们吃了猪肉饺子后,战斗力大幅提 ...

  2. 堆外内存: Chronicle Map

    https://www.javacodegeeks.com/2015/04/chroniclemap-java-architecture-with-off-heap-memory.html Java堆 ...

  3. AC日记——[JSOI2007]建筑抢修 bzoj 1029

    1029 思路: 贪心,而且,stl水过: 然而神特么输出que.size()就错! 代码: #include <queue> #include <cstdio> #inclu ...

  4. POSTGRESQL 完美备份还原

    1.POSTGRESQL 完美备份还原 进入到Postgresql下的bin文件夹,会看到不少的exe文件,这就是PostgreSQL内置的工具了.里面会找到pg_dump.exe.我们实际使用的就是 ...

  5. Allocate exception for servlet XXX 基本异常

    HTTP Status 500 - Error instantiating servlet class cn.tedu.servlet    错误!! 解决方案: 查看当前项目下的web.xm文件的真 ...

  6. CF 862A Mahmoud and Ehab and the MEX【数组操作】

    A. Mahmoud and Ehab and the MEX time limit per test 2 seconds memory limit per test 256 megabytes in ...

  7. POJ 1240 Pre-Post-erous! && East Central North America 2002 (由前序后序遍历序列推出M叉树的种类)

    题目链接:http://poj.org/problem?id=1240 本文链接:http://www.cnblogs.com/Ash-ly/p/5482520.html 题意: 通过一棵二叉树的中序 ...

  8. hihocoder1062 最近公共祖先·一

    #1062 : 最近公共祖先·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho最近发现了一个神奇的网站!虽然还不够像58同城那样神奇,但这个网站仍然让小Ho乐在 ...

  9. 前端基础-JavaScript的基本概述和语法

    1.JavaScript概述 2.JavaScript引入方式 3.JavaScript语言规范 4.JavaScript语言基础 5.JavaScript数据类型 6.JavaScript运算符 7 ...

  10. 1.3(Spring MVC学习笔记)数据绑定

    一.数据绑定介绍 用户发送过来的数据,只有传递到服务器端的参数上才会起作用. 比如用户输入的用户名和密码要和后台方法中代表用户名和密码的变量关联起来, 从而才能使用用户传递的数据进行一些操作,这样数据 ...