本文共 1725 字,大约阅读时间需要 5 分钟。
要进行socket编程,发送网络消息,我们可以使用 Python 内置的 socket 库 。
目前的socket编程,使用的最多的就是通过tcp协议进行网络通讯的。
tcp进行通讯的程序双方,分为服务端和客户端。
tcp 协议进行通讯的双方,是需要先建立一个虚拟连接的。然后双方程序才能发送业务数据信息。
建立tcp虚拟连接是通过著名的 三次握手 进行的。
具体三次握手的细节大家可以参考这篇文章
我们现在来看一个 tcp协议进行通讯的 socket 服务端程序和客户端程序。
下面是tcp 服务端程序 server.py
# === TCP 服务端程序 server.py ===# 导入socket 库from socket import *# 主机地址为空字符串,表示绑定本机所有网络接口ip地址# 等待客户端来连接IP = ''# 端口号PORT = 50000# 定义一次从socket缓冲区最多读入512个字节数据BUFLEN = 512# 实例化一个socket对象# 参数 AF_INET 表示该socket网络层使用IP协议# 参数 SOCK_STREAM 表示该socket传输层使用tcp协议listenSocket = socket(AF_INET, SOCK_STREAM)# socket绑定地址和端口listenSocket.bind((IP, PORT))# 使socket处于监听状态,等待客户端的连接请求# 参数 8 表示 最多接受多少个等待连接的客户端listenSocket.listen(8)print(f'服务端启动成功,在{PORT}端口等待客户端连接...')dataSocket, addr = listenSocket.accept()print('接受一个客户端连接:', addr)while True: # 尝试读取对方发送的消息 # BUFLEN 指定从接收缓冲里最多读取多少字节 recved = dataSocket.recv(BUFLEN) # 如果返回空bytes,表示对方关闭了连接 # 退出循环,结束消息收发 if not recved: break # 读取的字节数据是bytes类型,需要解码为字符串 info = recved.decode() print(f'收到对方信息: {info}') # 发送的数据类型必须是bytes,所以要编码 dataSocket.send(f'服务端接收到了信息 {info}'.encode())# 服务端也调用close()关闭socketdataSocket.close()listenSocket.close()
下面是tcp 客户端程序 client.py
# === TCP 客户端程序 client.py ===from socket import *IP = '127.0.0.1'SERVER_PORT = 50000BUFLEN = 1024# 实例化一个socket对象,指明协议dataSocket = socket(AF_INET, SOCK_STREAM)# 连接服务端socketdataSocket.connect((IP, SERVER_PORT))while True: # 从终端读入用户输入的字符串 toSend = input('>>> ') if toSend =='exit': break # 发送消息,也要编码为 bytes dataSocket.send(toSend.encode()) # 等待接收服务端的消息 recved = dataSocket.recv(BUFLEN) # 如果返回空bytes,表示对方关闭了连接 if not recved: break # 打印读取的信息 print(recved.decode())dataSocket.close()
效果:
参考文章:转载地址:http://eyhzi.baihongyu.com/