python udp客户端超时machinsm [英] python udp client time out machinsm

查看:66
本文介绍了python udp客户端超时machinsm的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果服务器套接字中生成的 rand 数小于 4,我的客户端套接字将暂停接收数据.我需要设置超时机制以允许客户端套接字检测到超时",然后它会继续发送消息.在我运行服务器套接字然后客户端套接字后,错误消息显示如下:

My client socket would suspend in receving data if the rand number generated in Server socket less than 4. I need to set up time out mechanism to allow client socket detect there is "time out" and then it would continue send message. After I run the server socket and then the client socket, an error message showed below:

Traceback (most recent call last):
File "E:\Studying\Python workspace\Client\src\Client.py", line 34, in <module>
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()

推荐答案

好吧,settimeout() 会产生异常.试试这个:

Well, settimeout() yields an exception. Try this:

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 )

  except socket.timeout:
    print("closing socket")
    client.close()

如果您想了解有关 socket.settimeout() 的更多信息,请查看此链接:http://docs.python.org/2/library/socket.html#socket.timeout

If you want more information on socket.settimeout(), check this link: http://docs.python.org/2/library/socket.html#socket.timeout

希望有帮助!

这篇关于python udp客户端超时machinsm的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆