参考
简单流程
编写 Server
编写 Client
示例

参考

简单流程

编写 Server

编写 Server 流程简单介绍如下:

第一步,创建 socket 对象

先看示例:

socket = socket.socket(family,type)

如果您熟悉其他语言 socket 编程,可以看出,此处几乎“一模一样”。

family
表示地址家族,可为 AF_INET (通常指 Internet 形式地址) 或 AF_UNIX (通常指在本机进行通信)
type
表示套接字类型,可为 SOCK_STREAM (流套接字) 或 SOCK_DGRAM (数 据套接字)

第二步,绑定刚才创建的 socket 对象到指定地址

还是先看示例:

socket.bind(address)

由 AF_INET 创建的 socket 对象, address 形式为一个双元素元组,格式为: (host,port) ,host 指主机地址, port 指端口号。

第三步,listen — 监听

socket.listen(backlog)

backlog 指定最多允许多少个客户端连接到服务器,最小值为1.

第四步,accept — 读取信息

connection,address = socket.accept()

调用accept方法时,socket会时入“waiting”状态。客户请求连接时,方法建立连 接并返回服务器。accept方法返回一个含有两个元素的元组 (connection,address)。第一个元素connection是新的socket对象,服务器必须 通过它与客户通信;第二个元素 address是客户的Internet地址。

第五步,处理阶段

服务器和客户端通过 send 和 recv 方法通信(传输数据)。

服务器调用 send,并采用字符串形式向客户发送信息。send 方法返回已发送的 字符个数。服务器使用 recv 方法从客户接收信息。调用 recv 时,服务器必须 指定一个整数,它对应于可通过本次方法调用来接收的最大数据量。 recv 方法 在接收数据时会进入 “blocked” 状态,最后返回一个字符串,用它表示收到的数 据。如果发送的数据量超过了 recv 所允许的,数据会被截短。多余的数据将缓 冲于接收端。以后调用 recv 时,多余的数据会从缓冲区删除(以及自上次调用 recv 以来,客户可能发送的其它任何数据)。

第六步,结束

服务器调用 socket 对象的 close 方法关闭连接。

编写 Client

第一步, 创建 socket

socket = socket.socket(family,type)

第二步, 使用 connect 方法连接服务器

对于 AF_INET 家族,格式如下:

socket.connect ((host,port))

第三步, 处理阶段

使用 send 和 recv 方法通信

第四步, 关闭

调用 close 方法关闭连接

示例