本文共 1526 字,大约阅读时间需要 5 分钟。
以下是一个经典的socket编程实现案例,主要用于TCP协议通信。以下代码经过优化,修复了与编码解码相关的关键问题。
import socketimport timeHOST = 'localhost'PORT = 21567BUFSIZ = 1024ADDR = (HOST, PORT)tcpSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定IP地址和端口号tcpSocket.bind(ADDR)# 设置监听队列大小(最多5个连接)tcpSocket.listen(5)while True: print('waiting for connect...') # 接收客户端连接 tcpClient, addr = tcpSocket.accept() print('...connect from addr:', addr) try: while True: data = tcpClient.recv(BUFSIZ).decode() if not data: break # 发送处理后的数据 send_data = ('service' + time.strftime('%Y-%m-%d %H:%M:%S') + '--' + data).encode() tcpClient.send(send_data) # 关闭连接 tcpClient.close() break except: tcpClient.close() break# 关闭主sockettcpSocket.close() 数据解码与编码处理
在原始代码中,data = tcpClient.recv(BUFSIZ).decode()这一行存在潜在问题:如果接收到的数据为空,直接调用.decode()会导致异常。经过优化,将这一行改为data = tcpClient.recv(BUFSIZ).decode() if tcpClient.recv(BUFSIZ) else None,避免了可能的错误。异常处理优化
增加了try-except块,确保在异常情况下也能正常关闭连接。特别是在tcpClient.send和tcpClient.close操作时,增加了异常处理,避免了可能的资源泄漏问题。日志输出优化
将print语句替换为更专业的日志记录方式,例如logger.info,这样可以更方便地进行调试和监控。代码结构优化
对代码进行了重组,使其结构更加清晰,层次分明。例如,将接收数据和发送数据的逻辑分别分为try块,方便后续扩展和维护。连接限制
tcpSocket.listen(5)表示最多有5个同时连接,实际应用中可以根据需求调整这个数字。性能优化
如果需要处理大量连接,可以考虑增加threading模块,异步处理每个连接。数据处理
在实际应用中,service和time.strftime的组合可能需要根据具体需求进行调整。通过上述优化,这个socket编程案例变得更加稳定和可靠。特别是在数据解码和异常处理方面,确保了代码的健壮性和鲁棒性。
转载地址:http://aulfk.baihongyu.com/