python标准版-socket模块

python标准库提供了一个socket套接字模块,可以调用该模块进行网络通信

1. socket对象

socket.socket(family,type)

该方法创建并返回一个新的socket对象,这也是socket模块最常用的方法。
family参数指的是host的种类:
     AF_UNIX:也叫AF_LOCAL,基于本地文件的
     AF_NETLINK:这是linux系统支持的一种套接字
     AF_INET:这个套接字是基于网络的,对于IPV4协议的TCP和UDP(常用)
     AF_INET6:这个套接字是基于网络的,对于IPV6协议的TCP和UDP
type参数指的是套接字类型:
     SOCK_STREAM:流套接字,使用TCP socket(常用)
     SOCK_DGRAM:数据包问套接字,使用UDP socket(常用)
     SOCK_RAW:raw套接字

这些参数在socket模块有定义

2. socket对象的方法

s=socket.socket(family,type) 

(1)s.bind(address)

将socket绑定到一个地址和端口上,通常用于socket服务端

address必须是一个双元素元组,格式为:(ip or host,port)

如果端口号正在被使用或者主机名或IP地址错误,则引发socket.error异常。

端口号的使用是有限制的,在linux或者unix之中只有系统管理员才能使用1024以下的端口,这些端口号用于标准服务。

(2)s.accept()

返回一个客户机socket,带有客户机端的地址信息。

调用accept方法的时候,socket会进入阻塞状态。客户请求连接时,方法建立连接并返回服务器。

accept方法返回一个双元素元组,形如(connection,address)。第一个元素是新的socket对象,第二个元素是客户的IP地址。

当一个连接close之后,可以接着调用accept继续接收从客户端发来的连接请求,因为listen让服务器一直处于监听的状态。

(3)s.listen(backlog)

将socket设置成监听模式,可以监听backlog外来的连接请求,让服务器开始监听客户端发来的连接请求

这个方法设置服务器为监听状态,backlog制定了最多的连接数,至少为1.接到连接请求后,这些请求必须排队,如果队列达到backlog的数值,则拒绝接下来的连接请求

(4)s.connect(address)

将socket连接到定义的主机和端口上,通常用于socket客户端

address必须是一个双元素元组,格式为:(ip or host,port)

  (5)  s.recv(bufsize, flags)

从已连接的socket获取数据,返回值是一个字符串,代表接收到的数据。

bufsize表示一次能接收的最大数据,为了最佳匹配硬件和网络的实际情况,bufsize 的值应为 2 的相对较小的幂,如 4096。

flags一般设为0

recv方法接收数据时会进入阻塞状态,最后返回一个字符串,表示收到的数据。如果发送数据超过recv所允许,数据会被截断。多余的数据将缓冲于接收端。以后调用recv时,多余的数据会从缓冲区删除。

  (6)  s.send(data, flags)

通过socket发送指定的数据data,data是一个字符串

flag可以不理会

send方法返回已发送的字符个数。

(7)  s.close()

关闭socket连接

传输结束,通过调用close方法关闭连接

(8)  s.fileno()

返回套接字的文件描述符

(9)  s.getsockname()

返回套接字本身的(ip, port)

(10)  s.getpeername()

返回套接字远程连接的(ip, port)

(11)  s.getsockopt(level,optname,buflen)

返回由level和optname指定的套接字选项的值,buflen用于接收套接字选项值的缓冲区大小

(12) s.setsockopt(level, optname, value)

把level和optname指定的套接字选项设为value

(13) s.shut_down(how)

关闭一端或者两端的链接。

how设定为SHUT_RD,则不再接收数据

how设定为SHUT_WR,则不再发送数据

how设定为SHUT_RDWR,则不再发送数据,也不再接收数据

(14) s.settimeout(value)

设置最长阻塞时间

(15) s.settimeout()

获取阻塞最长时间

(16) s.recvfrom(buf, flags)

从套接字中获取数据,返回值格式为(string,address),其中address为发送方的地址,格式为(ip,port)

flags默认为0

(17) s.sendto(string, address)

发送数据string给套接字,接收地址为address,地址格式(ip,port)

socket模块中的方法

(1) socket.create_connection(address timeout source_address )

create_connection类似于connect函数,但是比connect更高级。

address格式为(ip or host,port)。如果 host 是非数字主机名,它将尝试从 AF_INET 和 AF_INET6 解析它,然后依次尝试连接到所有可能的地址,直到连接成功。这使得编写兼容 IPv4 和 IPv6 的客户端变得容易。

传入可选参数 timeout 可以在套接字实例上设置超时(在尝试连接前)。如果未提供 timeout,则使用由 getdefaulttimeout() 返回的全局默认超时设置。

如果提供了 source_address,它必须为二元组 (host, port),以便套接字在连接之前绑定为其源地址。如果 host 或 port 分别为 ‘’ 或 0,则使用操作系统默认行为。

(2) socket.has_ipv6

指示当前平台是否支持IPV6

(3) socket.gethostbyname(hostname)

把主机名(如 www.baidu.com)转换为IPV4地址

(4) socket.gethostname(hostname)

返回当前运行python解释器的机器的主机名

(5) socket.ntohl(x)

把32位正整数从网络字节序转换为主机字节序

(6) socket.ntohs(x)

把16位正整数从网络字节序转换为主机字节序

(7) socket.htonl(x)

把32位正整数从主机字节序转换为网络字节序

(8) socket.htons(x)

把16位正整数从主机字节序转换为网络字节序

(9) socket.inet_pton(address_family, ip_string)

将特定地址簇的 IP 地址(字符串)转换为压缩二进制格式。

(10) socket.inet_ntop(address_family, packed_ip)

将压缩二进制格式转换为字符串格式。

(11) socket.getdefaulttimeout( )

返回用于新套接字对象的默认超时(以秒为单位的浮点数)。值 None 表示新套接字对象没有超时。首次导入 socket 模块时,默认值为 None

(12) socket.setdefaulttimeout(timeout)

设置用于新套接字对象的默认超时(以秒为单位的浮点数)

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值