Python网络编程(2)——socket模块(2)

时间:2022-09-05 19:08:50

目录:

  1. 异常

  2. 地址族

  3. 套接字类型

  4. 模块方法

  5. Socket对象与实例方法

  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。

  参数 familysocktype 和 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)的更多相关文章

  1. Python网络编程(socket模块、缓冲区、http协议)

      网络的概念:主机   端口  IP  协议 服务器: localhost/127.0.0.1 客户端: 只是在本机启动客户端,用127.0.0.1访问     服务器: 0.0.0.0 客户端: ...

  2. python 网络编程:socket(二)

    上节地址:Python网络编程:socket 一.send和sendall区别 send,sendall         ret = send('safagsgdsegsdgew') #send 发送 ...

  3. python 网络编程:socket

    在学习socket之前,我们先复习下相关的网络知识. OSI七层模型:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层.OSI七层模型是由国际标准化组织ISO定义的网络的基本结构,不仅包括一 ...

  4. python 网络编程(Socket)

    # from wsgiref.simple_server import make_server## def RunServer(environ,start_response):# start_resp ...

  5. python网络编程:socket套接字

    一.socket 二.TCP服务器 三.TCP客户端 四.UDP服务器 五.UDP客户端 六.聊天的客户端 七.聊天的服务器 一.socket """ 学习网络编程 其实 ...

  6. Python网络编程基础 ❸ struct模块 基于upd的socket服务

    struct模块 基于upd的socket服务

  7. Python 网络编程和Socket

    2017-07-24 20:43:49 Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求.Http协议主要的操作流程是req ...

  8. Python学习:20.Python网络编程(Socket)

    一.Socket介绍 我们知道两个进程如果需要进行通讯,最基本的一个前提是能够唯一标示一个进程.在本地进程通讯中可以使用PID来唯一标示一个进程,但PID只在本地唯一,网络中的两个进程PID冲突几率很 ...

  9. python | 网络编程(socket、udp、tcp)

    一.套接字 socket 1.1 作用:实现不同主机间的进程间通信(不同电脑.手机等设备之间收发数据) 1.2 分类:udp.tcp 1.3 创建 socket import socket socke ...

  10. Python网络编程基础 struct模块 解决黏包问题 FTP

    struct模块 解决黏包问题 FTP

随机推荐

  1. Ajax入门(一)

    最近开始学习Ajax了0.0,虽然其他的还没巩固,但既然学了就先写下来吧... Ajax的定义呢,百度吧= =...就觉得最实用的地方就是页面无刷新,但网页实现了与后台的同步更新.   1, 首先创建 ...

  2. W3School-CSS 定位 (Positioning) 实例

    CSS 定位 (Positioning) 实例 CSS 实例 CSS 背景实例 CSS 文本实例 CSS 字体(font)实例 CSS 边框(border)实例 CSS 外边距 (margin) 实例 ...

  3. Visual Studio Team System 2008 Team Suite(90 天试用版)

    安装完成后,在“控制面板”中启动“添加删除程序”,选中Vs2008,点击“更改.删除”,输入序列号:PYHYP-WXB3B-B2CCM-V9DX9-VDY8T

  4. BIP_BI Publisher Administrator设定Configuration/Font/Currencies(案例)

    2014-08-08 Created By BaoXinjian

  5. C# 委托总结

    总结 委托的本质: 委托是一种特殊的数据类型,它表示某种特定类型的函数,并且可以表示多个函数,将这些函数串联起来.使用委托就好像函数调用一样. 委托实质上是一个类,编译器会根据关键字delegate自 ...

  6. 一次优化web项目的经历记录(二)

    一次优化web项目的经历记录 这段时间以来的总结与反思 前言:最近很长一段时间没有更新博客了,忙于一堆子项目的开发,严重拖慢了学习与思考的进程. 开水倒满了需要提早放下杯子,晚了就会烫手,这段时间以来 ...

  7. denyhost

    1. denyhost 简介及ssh安全 对外提供的服务器,每天都会被恶意扫描,试图暴力穷举密码,达到入侵的目的.从而控***务器,占用资源.网页挂马.垃圾广告.更会影响我们业务的正常使用和数据的安全 ...

  8. 至Webserver构造svgz的文件需要http头,让你的浏览器中打开svgz档

    IE8以及IE8不支持以下浏览器SVG的.svgz它是svg压缩文件格公式,本文介绍的配置独立的浏览器,但浏览svgz请IE9+要么Firefox,Chrome和其他现代的浏览器打开. 让我们以正确显 ...

  9. 开源 免费 java CMS - FreeCMS1.9 职位管理

    项目地址:http://code.google.com/p/freecms/ 职位管理 管理职位,实现招聘功能. 1. 职位管理 从左側管理菜单点击职位管理进入. 2. 加入职位 在职位列表下方点击& ...

  10. tensorflow入门教程

    人工智能感觉很神秘,作为google公司力推的人工智能框架tensorflow也受到很多人的关注.本文用一个最简单的例子,带领大家看看tensorflow是如何工作的.如果你对人工智能的原理不了解可以 ...