您的位置:首页 > 编程语言 > Python开发

Python socket的编程教程

2013-07-31 19:39 302 查看
 

http://www.oschina.net/question/12_76126 

例子 入门通俗易懂

 

AF_UNIX, AF_INET, AF_INET6a Python 支持的套接字家族

SO_STREAM, SO_DGRAM 套接字类型 (TCP = 流, UDP = 数据报)

has_ipv6b 表示是否支持IPv6 的标志变量
异常
error 套接字相关错误

herrora 主机和地址相关的错误

gaierrora 地址相关的错误

timeoutb 超时
函数
socket() 用指定的地址家族,套接字类型和协议类型(可选)创建一个套接字对象

socketpair()c 用指定的地址家族,套接字类型和协议类型(可选)创建一对套接字对象

fromfd() 用一个已经打开的文件描述符创建一个套接字对象

数据属性
ssl()d 在套接字初始化一个安全套接字层(SSL)。不做证书验证。

getaddrinfo()a 得到地址信息

getfqdn()e 返回完整的域的名字

gethostname() 得到当前主机名

gethostbyname() 由主机名得到对应的ip 地址

gethostbyname_ex() gethostbyname()的扩展版本,返回主机名,主机所有的别名和

IP 地址列表。

gethostbyaddr() 由IP 地址得到DNS 信息,返回一个类似gethostbyname_ex()

的3 元组。

getprotobyname() 由协议名(如'tcp')得到对应的号码。

getservbyname()/ 由服务名得到对应的端口号或相反

getservbyport() 两个函数中,协议名都是可选的。

ntohl()/ntohs() 把一个整数由网络字节序转为主机字节序

htonl()/htons() 把一个整数由主机字节序转为网络字节序

inet_aton()/ 把IP 地址转为32 位整型,以及反向函数。(仅对IPv4 地址有效)

inet_ntoa()

inet_pton()/ 把IP 地址转为二进制格式以及反向函数。(仅对IPv4 地址有效)

inet_ntop()b

getdefaulttimeout()/ 得到/设置默认的套接字超时时间,单位秒(浮点数)

setdefaulttimeout()b

转自:http://www.cnblogs.com/zhu327/archive/2013/01/04/2844271.html

 

 

 

具体:

ocket 模块

socket 地址

类型形式解释示例
AF_UNIX字符串  
AF_INET(host, port)host 是字符串,可以是主机名或IP地址,port是一个整数('100.50.200.5', 1369) , ('daring.cwi.nl', 38009)
AF_INET6(host, port, flowinfo, scopeid)  
IPv4 形式的地址,有两种形式也表示 host 地址:

空字符串表示 INADDR_ANY
'<broadcast>'
表示 INADDR_BROADCAST
如果使用主机名做为 host 的值,Python 默认使用 DNS 查询到的主机名第一个IP地址做为 host 真实地址。所以,最好使用 IP 地址,这样程序行为是确定的。

其他概念还有: AF_NETLINK , AF_TIPC

TIPC: 透明进程间通信(Transparent Inter-process Communication, TIPC) 是一种用于进程间通信的网络通信协议,原本是为集群间通信特别设计的。它允许设计人员能够创建可以和其它应用快速可靠地通信应用,无须考虑在其它需要通信的应用在集群环境中的位置。

exception

socket.error

系统调用出错会有这个异常,2.6 以后己经是 IOError 的子类

socket.herror

地址相关的错误, 如 gethostbyname_ex() and gethostbyaddr() 调用

socket.gaierror

地址相关的错误, 如 getaddrinfo() and getnameinfo()

socket.timeout

使用 settimeout() 调用的 socket 对象操作可以会出现这个错误

地址类型

socket.AF_UNIX
socket.AF_INET
socket.AF_INET6
这些地址类型表明地址(协议)类型,做为 socket() 的第一个参数。

socket 类型

socket.SOCK_STREAM
socket.SOCK_DGRAM
socket.SOCK_RAW
socket.SOCK_RDM
socket.SOCK_SEQPACKET
这些值做为 socket() 的第二个参数(仅 SOCK_STREAM 和 SOCK_DGRAM 常用)

其他

SO_*
socket.SOMAXCONN
MSG_*
SOL_*
IPPROTO_*
IPPORT_*
INADDR_*
IP_*
IPV6_*
EAI_*
AI_*
NI_*
TCP_*


作为 setsockopt() 和 getsockopt() 的参数

SIO_*
RCVALL_*


Windows 下的 WSAIoctl() 中用

TIPC_*


TIPC 中使用

socket.has_ipv6 , 此平台是否支持 IPv6

方法

socket.create_connection(address[, timeout[, source_address]])

连到一个 TCP 服务上, 参数 address 是 (host, port) 形式。如果 hostname 是主机名,它会尝试解析服务的 AF_INET 和 AF_INET6 地址,然后依次连接所有可能的地址.这个函数使得写一个兼容 IPv4 和 IPv6 的程序很简单.

如果 timeout 参数没有指定,默认使用 getdefaulttimeout() 值.

source_address 格式和 address 参数一样,如果给定值, socket 连接前先绑定这个地址做为源地址.否则,使用系统默认值(本机对外地址,临时端口)

socket.getaddrinfo(host, port[, family[, socktype[, proto[, flags]]]])

将 host/port 参数转换为特定形式的数据, 返回
(family, socktype, proto, canonname, sockaddr)


host, 可以是一个域名,表示IP地址的字符串,或None
port, 可以是一个表示服务名的字符串(如
'http'
), 数字端口号,或None

>>> socket.getaddrinfo("www.python.org", 80, 0, 0, socket.SOL_TCP)
[(2, 1, 6, '', ('82.94.164.162', 80)),
(10, 1, 6, '', ('2001:888:2000:d::a2', 80, 0, 0))]


socket.getfqdn([name])

socket.gethostbyname(hostname)

socket.gethostbyname_ex(hostname)

socket.gethostname()

socket.gethostbyaddr(ip_address)

socket.getnameinfo(sockaddr, flags)

socket.getprotobyname(protocolname)

socket.getservbyname(servicename[, protocolname])

socket.getservbyport(port[, protocolname])

>>> socket.getprotobyname('tcp')
6
>>> socket.getservbyname('http', 'tcp')
80
>>> socket.getservbyname('ftp')
21
>>> socket.getservbyport(22)
'ssh'


socket.socket([family[, type[, proto]]])

创建新 socket ,

family , 可以是 AF_INET (the default), AF_INET6 or AF_UNIX
type , 可以是 SOCK_STREAM (the default), SOCK_DGRAM or perhaps one of the other SOCK_ constants.

proto 通常是 0 , 可以省略

socket.socketpair([family[, type[, proto]]])

socket.fromfd(fd, family, type[, proto])

python 文件对象的 fileno() 方法可以得到 fd 值,将文件模拟成 socket 的方法.

socket.ntohl(x)

将 32-bit 的正整数从网络字节序转换为机器序

socket.ntohs(x)

将 16-bit 的正整数从网络字节序转换为机器序

socket.htonl(x)

socket.htons(x)

socket.inet_aton(ip_string)

将形如 "192.168.1.15" 这样的 IP 地址转换为 32-bit 的二进制形式,在与 C API 接口时有用.

 

转自:http://www.ylinux.org/forum/t/409

inet_pton() 支持 IPv6

socket.inet_ntoa(packed_ip)

socket.inet_pton(address_family, ip_string)

socket.inet_ntop(address_family, packed_ip)

socket.getdefaulttimeout()

socket 模块第一次导入,此函数返回 None , 如果这个函数返回 None , 说明新的 socket 对象没有 timeout .

socket.setdefaulttimeout(timeout)

socket.socket

表示 Python type 对象

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: