python提供了两个级别访问的网络服务:
- 低级别的网络服务支持基本的 Socket,提供了标准BSD Sockets API,可访问底层操作系统Socket接口的全部方法
- 高级别的网络服务模块 SocketServer,它提供了服务器中心类,可以简化网络服务器的开发
Socket又称套接字,应用程序通常通过套接字向网络中发出请求或应答网络请求,是主机间或一台计算机上的进程可以通信
导入:import socket
创建套接字:s = socket.socket([family[, type[, proto]]])
family
:套接字家族可以是AF_UNIX
或者AF_INET
type
:套接字类型,可以根据是面向连接
还是非连接
的分别为SOCK_STREAM
、SOCK_DGRAM
proto
:默认为0
服务端套接字对象内建方法:
函数 | 描述 |
---|---|
s.bind() | 绑定地址(host, port)到套接字,在AF_INET下以元组形式表示地址 |
s.listen(n) | 监听,指定最大连接数n,一般为5 |
s.accept() | 接受客户端连接,(阻塞式)等待连接 |
import socket
# 创建socket对象
serverSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定端口
serverSocket.bind(('127.0.0.1', 10086))
# 设置最大连接数
serverSocket.listen(5)
print('等待连接...')
while True:
# 建立客户端连接
clientSocket, addr = serverSocket.accept()
print(f"连接地址:{str(addr)}")
msg = '您已成功连接到服务器'
clientSocket.send(msg.encode('utf-8'))
clientSocket.close()
客户端套接字对象内建方法:
函数 | 描述 |
---|---|
s.connect() | 连接服务器,address格式为元组(hostname, port) |
s.connect_ex() | 连接出错不抛出异常,返回异常码 |
import socket
# 创建套接字
clientSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接端口
clientSocket.connect(('127.0.0.1', 10086))
# 接收小于1024数据
msg = clientSocket.recv(1024)
print(msg.decode('utf-8'))
公共套接字函数:
函数 | 描述 |
---|---|
s.recv(buffsize) | 接收数据以字符串形式返回,指定接受最大数据量 |
s.send() | 将字符串数据发送给连接的套接字中 |
s.close() | 关闭套接字连接 |