创建server步骤:
- 创建socket对象
socket = socket.socket(family, type)
family:- AF_INET / AF_INET6:Internet地址
- AF_UNIX:同一台机器上的进程间通信
type: - SOCK_STREAM: 流套接字
- SOCK_DGRAM: 数据报套接字
- 绑定socket到指定地址
socket.bind(address)
address: (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)
- 使用socket的connect方法连接服务器
socket.connect((host,port))
host代表服务器主机名或IP,port代表服务器进程所绑定的端口号。如连接成功,客户就可通过套接字与服务器通信,如果连接失败,会引发socket.error异常。 - 处理阶段,客户和服务器将通过send方法和recv方法通信。
- 传输结束,客户通过调用socket的close方法关闭连接。