目录:
1. 异常
2. 地址族
3. 套接字类型
4. 模块方法
socket模块提供了Python中的低层网络连接接口,用于操作套接字操作。
异常
socket模块共定义了4种异常:
socket.error
套接字相关的错误将会抛出该异常,伴随的值是解释错误信息的字符串或 (errno, string) 形式的系统调用异常返回。socket.error 是 IOError 的一个子类。
socket.herror
地址相关的错误、C API 调用等可能会抛出该异常,例如使用 h_errno 的C API,比如 gethostbyname_ex() 和 gethostbyaddr() 。伴随的值是一个 (h_errno, string) 二元组,代表一个由库函数调用返回的错误, string 描述 h_errno ,由C的 hstrerror() 函数返回。
socket.gaierror
地址相关的错误将会抛出该异常,例如 getaddrinfo() 和 getnameinfo() 函数。伴随的值是一个 (error, string)二元组,代表一个由库函数调用返回的错误,其中string描述error,由C的 gai_strerror() 函数返回。
socket.timeout
套接字超时时抛出该异常。套接字的超时由 实例方法settimeout() 函数设置,目前该异常的伴随值总是字符串“timed out”。
其他常量
socket.has_ipv6
布尔型的常量,显示当前平台是否支持IPV6协议。
例如:
>>> sys.platform
'win32'
>>> socket.has_ipv6
True
模块方法
socket.create_connection(addr[, timeout[, source_addr]])
作用:连接到一个监听地址addr的TCP服务上,并返回一个新的套接字对象。这个函数比socket.connetc()更高级,如果addr(host, port)中的host是一个非数值的值,那么该函数会同时尝试AF_INET和AF_INET6来解析它,然后尝试所有获得的可能地址,该方法可以用来编写同时支持IPv4和IPv6的客户端。
参数:
addr —— 服务器套接字地址
timeout —— 套接字的超时限制,如果没有提供,那么使用getdefaulttimeout()的设置
source_address —— 如果提供的话,该参数必须是(host, port)形式的二元组,套接字会在连接前绑定到这个指定的地址。
返回:
返回一个连接到目标地址的新的套接字对象。
socket.getaddrinfo(host, port[, family[, socktype[, proto[, flags]]]])
至少需要两个参数,将一个host/port信息转化为一个五元组,该五元组包含了一切连到目标host/port上需要的套接字信息。返回的五元组具有如下的形式: (family, socktype, proto, canonname, sockaddr) 。
将 host/port 参数转化为一个包含用于创建套接字的所有参数的5元组。host 代表域名,可以是 IPv4/v6 地址或者 None。port 可以是一个服务的字符串名称如'http',也可以是一个数字端口号或 None。传递 None 作为 host 和 port 的值等价于传递 NULL 给底层的 C API。
参数 family, socktype 和 proto 是可选的,默认为0,意味着选取所有的结果。参数 flags 可以是 ‘AI_*’常量中的一个或几个,可以影响结果是如何被计算和返回的,默认值也是0。例如, AI_NUMERICHOST 会关闭域名查询,如果 host 是一个域名,那么这里将会抛出一个异常。
该函数返回一个5元组,5元组的结构如下:
(family, socktype, proto, canonname, sockaddr)
其中 family,socktype,proto 全是整数,用于传递给 socket() 函数。
canonname will be a string representing the canonical name of the host if AI_CANONNAME is part of the flags argument; else canonname will be empty.
sockaddr 是一个描述套接字地址的元组,其格式依赖于返回结果中的 family (比如 family 是 AF_INET 时 sockaddr 是一个 (address, port) 二元组;而当 family 是 AF_INET6 时 sockaddr 是一个 (address, port, flow info, scope id) 四元组),该部分的结果可以传递给 socket.connect() 方法。
下面的例子给出了一个获取HTTP连接到www.python.org的80端口的连接信息:
>>> socket.getaddrinfo("www.python.org", 80, 0, 0, socket.IPPROTO_TCP)
[(2, 1, 6, '', ('82.94.164.162', 80)),
(10, 1, 6, '', ('2001:888:2000:d::a2', 80, 0, 0))]
socket.getfqdn(name='')
作用:返回参数的全称域名(fully qualified domain name string),如果参数name='',那么将会返回本地主机的全称域名
参数:字符串name,是要查询的目标主机名;
返回值:返回目标主机的全称域名。
socket.gethostbyname(hostname)
作用:将主机名翻译成IPv4地址,不支持IPv6的域名解析
参数:
hostname——目标主机的域名
返回:目标主机的IPv4地址
socket.gethostname()
作用:获取当前主机的主机名;
参数:无
返回:当前主机的主机名。
socket.gethostbyaddr(ip_address)
作用:返回目标IP地址的一些信息;
参数:ip_address——目标IP地址;
返回值:三元组 (hostname, aliaslist, ipaddrlist) ,其中:
hostname: 给定ip_address的主要主机名(primary host name);
aliaslist: 给定ip_address的备用主机名(alternative host names)构成的列表,可能为空;
ipaddrlist: 给定ip_address主机的IP地址列表,很可能只有一个IP地址。
socket.gethostbyname_ex(hostname)
作用:效果等用于 gethostbyaddr() ,但是参数hostname既可以是IP地址,也可以是目标主机名;
参数:hostname——点分式的IP地址或DNS主机名;
返回值:返回值的形式等同于 gethostbyaddr() 。
socket.getnameinfo(sockaddr, flags)
作用:将sockaddr转成(host, port)形式的二元组形式。
参数:
sockaddr —— 二元组,首元可以是IP地址,也可以是域名;次元是端口;
flags —— 通常是0。
返回:(host, port)形式的二元组,目标地址的IP地址和端口。
socket.getprotobyname(protocolname)
作用:获得网络协议名(如:'icmp')对应的值,可以用来传递给 socket() 函数作为可选的第三个参数,通常只用于以“raw”(SOCK_RAW)方式打开的套接字。对于正常的套接字,一般协议值会自动选取。
参数:
protocolname —— 网络协议名,如“icmp”、“tcp”等
返回:网络协议名对应的值。
socket.getservbyname(servicename[, protocolname])
作用:返回一个服务注册绑定的端口号,如FTP是21,SSH是22等。
参数:
servicename —— 要查询的服务的名称;
protocolname —— 可选,取值'tcp' 或 'udp'。
返回:
目标服务注册监听的端口号。
socket.getservbyport(port[, protocolname])
作用:与 getservbyname() 刚好相反,可以通过指定端口号查询一般情况下是哪些服务注册监听这些端口。
参数:
port —— 目标端口号,
protocolname —— 可选,取值'tcp' 或 'udp'。
返回:
通常监听目标端口的服务名称。
socket.socketpair([family[, type[, proto]]])
作用:(只在Unix平台上可用)创建一对连接的套接字对象。
参数:参数family, type, proto同 socket.socket() 方法。不过,如果平台定义了的话,默认的地址族是AF_UNIX,否则是AF_INET。
返回:一个二元组,包含两个已经连接的套接字对象。
socket.fromfd(fd, family, type[, proto])
作用:(只在Unix平台上可用)Duplicate the file descriptor fd (an integer as returned by a file object’s fileno() method) and build a socket object from the result. Address family, socket type and protocol number are as for the socket() function above. The file descriptor should refer to a socket, but this is not checked — subsequent operations on the object may fail if the file descriptor is invalid. This function is rarely needed, but can be used to get or set socket options on a socket passed to a program as standard input or output (such as a server started by the Unix inet daemon). The socket is assumed to be in blocking mode.
socket.ntohl(x)
作用:将32位网络字节序的正整型转换成主机字节序;
参数:x——4字节网络字节序的正整型;
返回:适合主机字节序的相同整数。
socket.ntohs(x)
作用:将16位网络字节序的正整型转换成主机字节序;
参数:x——2字节网络字节序的正整型;
返回:适合主机字节序的相同整数。
socket.htonl(x)
作用:将32位主机字节序的正整型转换成32位网络字节序的整型;
参数:x——4字节正整数;
返回:4字节网络字节序的相同整型变量。
socket.htons(x)
作用:将16位的主机字节序的正整数转换成16位网络字节序整型;
参数:x——2字节正整数;
返回:2字节网络字节序的相同整型变量。
socket.inet_aton(ip_string)
作用:将IPv4点分地址转换成32位二进制数(4字节长的字符串)的格式,不支持IPv6。
参数:点分格式的IPv4地址
返回:4字节打包后的字符串
socket.inet_ntoa(packed_ip)
作用:将32位打包的IPv4地址转换成点分形式,不支持IPv6。
参数:4字节打包后的IPv4地址
返回:对应IP地址的点分形式
socket.inet_pton(address_family, ip_string)
作用:将一个IP地址由它的地址族对应的字符串形式转换成打包后的二进制格式,支持IPv4和IPv6.
参数:
address_family——AF_INET 或 AF_INET6;
ip_string——IP地址串
返回:对应IP地址打包后的二进制形式。
socket.inet_ntop(address_family, packed_ip)
作用:将一个IP地址由它的地址族对应的字符串形式转换成打包后的二进制格式,支持IPv4和IPv6。
参数:
address_family——AF_INET 或 AF_INET6;
packed_ip——网络格式的,打包后的二进制形式的IP地址
返回:IPv4或IPv6的普通字符串形式的IP地址。
socket.getdefaulttimeout()
作用:返回默认的套接字超时时限(单位:秒)。
参数:不用参数;
返回值:
浮点数——默认的套接字超时秒数;
None——套接字没有默认的超时限制。
socket.setdefaulttimeout(timeout)
作用:设置默认的套接字超时。
参数:
返回:
Python网络编程(2)——socket模块(2)的更多相关文章
-
Python网络编程(socket模块、缓冲区、http协议)
网络的概念:主机 端口 IP 协议 服务器: localhost/127.0.0.1 客户端: 只是在本机启动客户端,用127.0.0.1访问 服务器: 0.0.0.0 客户端: ...
-
python 网络编程:socket(二)
上节地址:Python网络编程:socket 一.send和sendall区别 send,sendall ret = send('safagsgdsegsdgew') #send 发送 ...
-
python 网络编程:socket
在学习socket之前,我们先复习下相关的网络知识. OSI七层模型:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层.OSI七层模型是由国际标准化组织ISO定义的网络的基本结构,不仅包括一 ...
-
python 网络编程(Socket)
# from wsgiref.simple_server import make_server## def RunServer(environ,start_response):# start_resp ...
-
python网络编程:socket套接字
一.socket 二.TCP服务器 三.TCP客户端 四.UDP服务器 五.UDP客户端 六.聊天的客户端 七.聊天的服务器 一.socket """ 学习网络编程 其实 ...
-
Python网络编程基础 ❸ struct模块 基于upd的socket服务
struct模块 基于upd的socket服务
-
Python 网络编程和Socket
2017-07-24 20:43:49 Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求.Http协议主要的操作流程是req ...
-
Python学习:20.Python网络编程(Socket)
一.Socket介绍 我们知道两个进程如果需要进行通讯,最基本的一个前提是能够唯一标示一个进程.在本地进程通讯中可以使用PID来唯一标示一个进程,但PID只在本地唯一,网络中的两个进程PID冲突几率很 ...
-
python | 网络编程(socket、udp、tcp)
一.套接字 socket 1.1 作用:实现不同主机间的进程间通信(不同电脑.手机等设备之间收发数据) 1.2 分类:udp.tcp 1.3 创建 socket import socket socke ...
-
Python网络编程基础 struct模块 解决黏包问题 FTP
struct模块 解决黏包问题 FTP
随机推荐
-
Ajax入门(一)
最近开始学习Ajax了0.0,虽然其他的还没巩固,但既然学了就先写下来吧... Ajax的定义呢,百度吧= =...就觉得最实用的地方就是页面无刷新,但网页实现了与后台的同步更新. 1, 首先创建 ...
-
W3School-CSS 定位 (Positioning) 实例
CSS 定位 (Positioning) 实例 CSS 实例 CSS 背景实例 CSS 文本实例 CSS 字体(font)实例 CSS 边框(border)实例 CSS 外边距 (margin) 实例 ...
-
Visual Studio Team System 2008 Team Suite(90 天试用版)
安装完成后,在“控制面板”中启动“添加删除程序”,选中Vs2008,点击“更改.删除”,输入序列号:PYHYP-WXB3B-B2CCM-V9DX9-VDY8T
-
BIP_BI Publisher Administrator设定Configuration/Font/Currencies(案例)
2014-08-08 Created By BaoXinjian
-
C# 委托总结
总结 委托的本质: 委托是一种特殊的数据类型,它表示某种特定类型的函数,并且可以表示多个函数,将这些函数串联起来.使用委托就好像函数调用一样. 委托实质上是一个类,编译器会根据关键字delegate自 ...
-
一次优化web项目的经历记录(二)
一次优化web项目的经历记录 这段时间以来的总结与反思 前言:最近很长一段时间没有更新博客了,忙于一堆子项目的开发,严重拖慢了学习与思考的进程. 开水倒满了需要提早放下杯子,晚了就会烫手,这段时间以来 ...
-
denyhost
1. denyhost 简介及ssh安全 对外提供的服务器,每天都会被恶意扫描,试图暴力穷举密码,达到入侵的目的.从而控***务器,占用资源.网页挂马.垃圾广告.更会影响我们业务的正常使用和数据的安全 ...
-
至Webserver构造svgz的文件需要http头,让你的浏览器中打开svgz档
IE8以及IE8不支持以下浏览器SVG的.svgz它是svg压缩文件格公式,本文介绍的配置独立的浏览器,但浏览svgz请IE9+要么Firefox,Chrome和其他现代的浏览器打开. 让我们以正确显 ...
-
开源 免费 java CMS - FreeCMS1.9 职位管理
项目地址:http://code.google.com/p/freecms/ 职位管理 管理职位,实现招聘功能. 1. 职位管理 从左側管理菜单点击职位管理进入. 2. 加入职位 在职位列表下方点击& ...
-
tensorflow入门教程
人工智能感觉很神秘,作为google公司力推的人工智能框架tensorflow也受到很多人的关注.本文用一个最简单的例子,带领大家看看tensorflow是如何工作的.如果你对人工智能的原理不了解可以 ...