在 Python 程序中,Socket 库针对服务器端和客户端进行打开、读写和关闭操作。在 Socket 库中,用于创建 socket 对象的内置成员如下所示。

1) 函数socket.socket()

在 Python 标准库中,通过使用 socket 模块提供的 socket 对象,可以在计算机网络中建立相互通信的服务器与客户端。在服务器端需要建立一个 socket 对象,并等待客户端的连接。客户端使用 socket 对象与服务器端进行连接,一旦连接成功,客户端和服务器端就可以进行通信了。

在 Python 的 socket 对象中,函数 socket() 能够创建套接字对象。此函数是套接字网络编程的基础对象,具体语法格式如下。

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

说明:

参数“family”是AF_UNIX或AF_INET。

参数“type”是SOCK_STREAM或SOCK_DGRAM。

参数“proto”通常省略,默认为 0。

如果指定 fileno,则忽略其他参数,返回具有指定文件描述符的套接字。fileno 将返回相同的套接字,而不是重复,这有助于使用 socket.close() 函数关闭分离的套接字。

在 Python 程序中,为了创建 TCP/IP 套接字,可以用下面的代码调用函数 socket.socket()。

tcpSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

同理,在创建 UDP/IP 套接字时需要执行如下代码。

udpSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

因为有很多 socket 模块属性,所以此时可以使用“from module import ”导入方式,但这只是其中的一个例外。如果使用“from socket import ”导入方式,那么就把 socket 属性导入命名空间中。

虽然这看起来有些麻烦,但是通过这种方式能够大大减少代码,例如下面的代码。

tcpSock = socket(AF_INET, SOCK_STREAM)

一旦有了socket对象,使用socket对象的方法就可以进行进一步的交互。

2) 函数 socket.socketpair([family[, type[, proto]]])

函数 socket.socketpair() 的功能是使用所给的地址族、套接字类型和协议号创建一对已连接的 socket 对象地址列表,类型(type)和协议号(proto)的含义与前面 socket() 函数的相同。

3) 函数 socket.create_connection(address[, timeout[, source_address]])

其功能是连接到互联网上侦听的TCP服务地址(二元组),形式是(host,port),分别表示主机和端口,并返回套接字对象。这使得编写与IPv4和IPv6兼容的客户端变得容易。传递可选参数 timeout 将在尝试连接之前设置套接字实例的超时。

如果未提供超时,则使用 getdefaulttimeout() 返回的全局默认超时设置。如果提供了参数 source_address,则这个参数必须是一个二元组。如果主机或端口分别为''或 0,则使用操作系统的默认值。

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

其功能是复制文件描述符 fd(由文件对象的 fileno() 方法返回的整数),并从结果中构建一个套接字对象。参数 family、type 和 proto 的具体含义与 socket() 函数相同。文件描述符应该指向一个套接字,但是当文件描述符无效时,就不会被检查出来,在对象的后续操作中可能失败。虽然函数 socket.fromfd() 很少用到,但是可用于获取或设置作为标准输入或输出传递给程序的套接字选项(例如,由 UNIX inet 守护程序启动的服务器)。

5) 函数socket.fromshare(data)

该函数的功能是实例化从函数 socket.share() 获取的数据,假设套接字处于阻塞模式。

下面的实例文件 jiandanfuwu.py 演示了创建一个简单套接字服务器的过程。

import socket

sk = socket.socket()

sk.bind(("127.0.0.1",8080))

sk.listen(5) conn,address = sk.accept()

sk.sendall(bytes("Hello world",encoding="utf-8"))

下面的实例文件 jiandankehu.py 演示了创建一个简单套接字客户端的过程。

import socket

obj = socket.socket() obj.connect(("127.0.0.1",8080))

ret = str(obj.recv(1024),encoding="utf-8") print(ret)