socket模块
server端
注:监听之后后面部分就在循环里进行等待多客户端连接和收发消息
1、导入包
import socket
2、创建套接字:socket.socket()
有几个参数可以设置:地址族、套接字类型、协议号:
- 地址族:默认为socket.AF_INET,指定使用IPv4 网络协议;如果填入socket.AF_INET6,则能够使用IPv6 网络协议。
- 套接字类型:默认为socket.SOCK_STREAM,指定使用TCP协议的套接字流类型;如果填入socket.SOCK_DGRAM,则是使用UDP的套接字数据报类型。
- 协议号:默认为0。
server_socket = socket.socket() #创建套接字
3、设置本地IP和端口号
host = '127.0.0.1'
port = 2020
4、绑定IP和port:bind()
server_socket.bind((host,port)) #套接字对象绑定IP与port
5、监听:listen()
server_socket.listen(5) #设置套接字最大等待连接数5
6、接收来自客户端的连接请求:accept(),获取服务器端与客户端通信的ssl通道ssl和客户端地址addr
while True:
print("等待连接...")
ssl,addr = server_socket.accept() #获取服务器端的SSL通道和远程客户端地址
print("连接到:",addr)
7、收发消息:recv() send()
recv_buf = ssl.recv(1024).decode() #获取客户端发来的消息
ssl.send("欢迎来自{0}的{1}".format(addr,recv_buf).encode()) #通过ssl通道像客户端发送消息
8、关闭:close()
print('关闭连接....')
ssl.close() #关闭ssl通道
client端
1、导入包
import socket
2、创建套接字:socket.socket()
server_socket = socket.socket() #创建套接字
3、设置IP和端口号
host = '127.0.0.1'
port = 2020
4、像服务端请求连接:connect()
client_socket.connect((host,port))
5、收发消息
client_socket.send('123'.encode())
print('接收消息:',client_socket.recv(1024).decode())
阻塞的网络编程
上述的方法是阻塞的网络编程,在一个客户端连接关闭之后才能进行另一个客户端的连接。
思路:想要实现非阻塞的(异步)网络编程,多线程技术,将连接的客户端ssl和addr存于字典或列表中。