python socket recvfrom 超时捕获_python-udp客户端超时机制

在Python中,当服务器生成的随机数小于4时,客户端使用socket.recvfrom()接收数据会挂起。为了解决这个问题,需要设置超时机制。然而,尝试接收数据时仍然出现socket.timeout异常。服务器套接字不断接收和处理消息,而客户端在接收到超时错误后会继续发送消息。客户端通过设置socket.settimeout()来实现超时检查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果服务器套接字中生成的rand数小于4,则我的客户端套接字将在接收数据时挂起。我需要设置超时机制以允许客户端套接字检测到“超时”,然后它将继续发送消息。

在运行服务器套接字和客户端套接字之后,错误消息如下所示:Traceback (most recent call last):

File "E:\Studying\Python workspace\Client\src\Client.py", line 34, in

data , addr = client.recvfrom(1024)

socket.timeout: timed out

服务器套接字:import random

from socket import *

serverSocket = socket(AF_INET , SOCK_DGRAM)

serverSocket.bind(('', 15000))

while True:

rand = random.randint(0, 10)

message , address = serverSocket.recvfrom (1024)

message = message.upper()

print("received message: ", message)

print("echo to address: ", address)

print(rand)

if rand < 4:

continue

print("Sending message: ", message)

serverSocket.sendto(message, address)

客户端套接字import socket

UDP_IP = "127.0.0.1"

RPORT = 15000

MESSAGE = "ping"

print("UDP target IP: ", UDP_IP)

print("UDP target port: ", RPORT)

print("message going to send: ", MESSAGE)

client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

i=1

while True:

try:

if(i<11):

client.sendto(MESSAGE.encode('utf_8'),(UDP_IP, RPORT))

print("sending message: ", MESSAGE)

print(i)

i=i+1

client.settimeout(2)

data , addr = client.recvfrom(1024)

print("received echo: ", data)

print("received at: " , addr )

finally:

print("closing socket")

client.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值