15.1 socket--网络接口库

15. 进程间通讯与网络库

本库主要提供了不同进程之间通讯,以及不同网络之间的进程通讯。

15.1 socket--网络接口库

本模块提供了BSD类似的socket网络接口库,它可以使用在UnixWindowsMacOS等系统平台上。

exception socket.herror

地址相关错误的异常。

 

exception socket.gaierror

调用函数getaddrinfo()getnameinfo()出错抛出异常。

 

exception socket.timeout

当一个socket超时抛出的异常。

 

socket.AF_UNIX

socket.AF_INET

socket.AF_INET6

表示网络地址类型。

 

socket.SOCK_STREAM

socket.SOCK_DGRAM

socket.SOCK_RAW

socket.SOCK_RDM

socket.SOCK_SEQPACKET

socket的类型。

 

socket.socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None)

创建一个socket实例。参数familysocket地址类型;参数typeTCP还是UDP等类型;参数proto是协议版本号。

 

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

创建一对相互通讯的socket对象,仅用于Unix

 

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

创建一个连接到指定服务器的socket对象。参数address是(主机, 端口)元组;参数timeout是连接超时时间;参数source_address是指定绑定的客户端的地址和端口。

 

socket.fromfd(fd, family, type, proto=0)

从一个文件描述fd来创建一个socket对象。

 

socket.fromshare(data)

从指定的数据data里创建一个socket对象,仅用于Windows

 

socket.SocketType

Python表示socket的类型。

 

socket.getaddrinfo(host, port, family=0, type=0, proto=0, flags=0)

通过名称获取地址信息,返回5个元组(family, type, proto, canonname, sockaddr)的地址信息,可以用于连接服务器。

 

socket.getfqdn([name])

查询给出名称的域名称。

 

socket.gethostbyname(hostname)

把主机名称转换为IPv4地址格式。

 

socket.gethostbyname_ex(hostname)

使用扩展的方式把主机名称转换为IPv4地址格式。

 

socket.gethostname()

返回字符串表示的主机名称。

 

socket.gethostbyaddr(ip_address)

通过地址来获取主机名称,返回三元组的信息。

 

socket.getnameinfo(sockaddr, flags)

socket地址转换为两元素的元组(主机,端口)。

 

socket.getprotobyname(protocolname)

通过协议名称来获取合适参数给socket()函数使用。

 

socket.getservbyname(servicename[, protocolname])

从服务名称和协议名称转换为合适的端口。

 

socket.getservbyport(port[, protocolname])

从端口转换为服务名称。

 

socket.ntohl(x)

转换32位网络顺序数据到主机顺序。

 

socket.ntohs(x)

转换16位网络顺序数据到主机顺序。

 

socket.htonl(x)

转换32位主机顺序数据到网络顺序。

 

socket.htons(x)

转换16位主机顺序数据到网络顺序。

 

socket.inet_aton(ip_string)

把字符串表示的IP地址转换为32位二进制表示。

 

socket.inet_ntoa(packed_ip)

32位表示的IPv4地址转换为字符串表示的IP地址。

 

socket.inet_pton(address_family, ip_string)

从特定网络字符串表示的地址转换为二进制表示的地址。

 

socket.inet_ntop(address_family, packed_ip)

从特定网络二进制表示的地址转换为字符串表示的地址。

 

socket.CMSG_LEN(length)

返回总数据的长度。仅用于Unix

 

socket.CMSG_SPACE(length)

返回recvmsg()函数接收数据缓冲区的大小。仅用Unix

 

socket.getdefaulttimeout()

返回本模块默认的超时时间。

 

socket.setdefaulttimeout(timeout)

设置本模块的超时时间。

 

socket.sethostname(name)

设置主机的名称。仅用于Unix

 

socket.if_nameindex()

返回网络接口信息的列表。仅用于Unix

 

socket.if_nametoindex(if_name)

返回网络接口名称对应的接口索引值。仅用于Unix

 

socket.accept()

接收一个连接。返回元组(连接, 地址)。

 

socket.bind(address)

绑定socket对象到指定地址。

 

socket.close()

标记socket对象已经关闭。

 

socket.connect(address)

连接到远程的服务器地址。

 

socket.connect_ex(address)

连接到远程的服务器地址,返回一个错误,不产生异常。

 

socket.detach()

关闭socket对象,但文件描述符还是有效的。

 

socket.dup()

复制一个socket对象。

 

socket.fileno()

返回一个socket对象的文件描述数字。

 

socket.get_inheritable()

如果能被子进程继承的,返回True

 

socket.getpeername()

返回已经连接远端的地址。

 

socket.getsockname()

返回本地的地址。

 

socket.getsockopt(level, optname[, buflen])

返回socket设置的选项的值。

 

socket.gettimeout()

返回socket对象相关的超时时间。

 

socket.ioctl(control, option)

设置socket对象控制参数。仅用于Windows

 

socket.listen(backlog)

服务器监听连接进来。参数backlog是指明接收连接的队列大小。

 

socket.makefile(mode='r', buffering=None, *, encoding=None, errors=None, newline=None)

绑定一个文件对象到socket对象。

 

socket.recv(bufsize[, flags])

socket对象接收数据,返回包括数据bytes对象。

 

socket.recvfrom(bufsize[, flags])

socket对象接收数据,返回元组(数据对象,地址)。

 

socket.recvmsg(bufsize[, ancbufsize[, flags]])

socket对象接收数据和辅助数据。仅用于Unix

 

socket.recvmsg_into(buffers[, ancbufsize[, flags]])

与函数recvmsg类似,不过它把数据和辅助数据都放到缓冲区。仅用于Unix

 

socket.recvfrom_into(buffer[, nbytes[, flags]])

socket对象接收数据到缓冲区,不创建新数据对象。

 

socket.recv_into(buffer[, nbytes[, flags]])

接收数据到指定缓冲区,不创建新数据对象返回。

 

socket.send(bytes[, flags])

把数据发送给socket对象。

 

socket.sendall(bytes[, flags])

连续地发送所有数据,或者遇到异常才返回。

 

socket.sendto(bytes, address)

socket.sendto(bytes, flags, address)

发送数据到指定地址,一般使用在无连接的socket

 

socket.sendmsg(buffers[, ancdata[, flags[, address]]])

发送消息和辅助数据到socket对象。仅用于Unix

 

socket.set_inheritable(inheritable)

设置socket对象可继承。

 

socket.setblocking(flag)

设置socket为阻塞,还是非阻塞状态。

 

socket.settimeout(value)

对阻塞的socket设置阻塞的超时时间。

 

socket.setsockopt(level, optname, value)

设置socket对象的可选项参数。

 

socket.shutdown(how)

发送socket关闭信号包给对方。

 

socket.share(process_id)

复制一个socket对象,并共享给目标进程。

 

socket.family

socket的网络分类。

 

socket.type

socket对象类型。

 

socket.proto

socket对象网络协议。

 

创建一个简单TCP服务器的例子:

#python 3.4
import socket
 
HOST = ''                 
PORT = 50007              
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
print('Connected by', addr)
while True:
    data = conn.recv(1024)
    if not data: break
    conn.sendall(data)
conn.close()


在这个例子里,指定主机名称为空,端口为50007,然后调用函数socket()来创建一个socket对象,接着调用函数bind()绑定,调用函数listen()监听连接,调用函数accept()来接收连接进来并创建一个socket对象,然后与这个对象进行通讯,调用函数recv()接收数据,再通过函数sendall()发送数据回去。

 

创建TCP客户端的例子:

#python 3.4
import socket
 
HOST = '127.0.0.1'        # The remote host
PORT = 50007              # The same port as used by the server
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.sendall(b'Hello, world')
data = s.recv(1024)
s.close()
print('Received', repr(data))


在这个例子里,指定连接本地IP地址127.0.0.1,服务器的端口为50007,调用函数socket()函数一个socket对象,调用函数connect()连接服务器,调用函数sendall()发送数据,接着调用函数recv()来接收服务器发送回来的数据,最后调用函数close()关闭socket对象。



蔡军生  QQ:9073204  深圳

你可能感兴趣的:(多线程,socket,python,通讯,milang)