Python下UDP的Socket编程:服务器端因客户端的非正常退出而报错?

在Python的UDP Socket编程中,当客户端非正常退出(如使用Pycharm终止键),服务器端会抛出`ConnectionResetError`异常。由于UDP的无连接特性,理论上服务器不应受客户端退出影响。问题出现在服务器端可能仍尝试向已关闭的客户端发送数据。为解决这个问题,可以引入心跳机制,通过心跳包监控客户端状态,及时清理异常掉线的连接。
摘要由CSDN通过智能技术生成

服务器端代码


import socket
import threading
import logging
import datetime

logging.basicConfig(format='%(message)s', level=logging.INFO)


class ChatUdpServer:
    def __init__(self, ip='127.0.0.1', port=9999, interval=10,):
        self.sock = socket.socket(type=socket.SOCK_DGRAM)
        self.addr = ip, port
        self.event = threading.Event()
        self.client_set = {}
        self.interval = interval

    def start(self):
        self.sock.bind(self.addr)
        threading.Thread(target=self.recv,).start()

    def recv(self):
        while not self.event.is_set():
            try:
                data, raddr_info = self.sock.recvfrom(1024)
                print(self.sock, raddr_info)
            except ConnectionResetError:
                print('{} client is stop'.format(raddr_info))
                self.client_set.pop(raddr_info)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值