当前位置: 首页 > 面试题库 >

如何读取UDP连接,直到达到超时?

干鑫鹏
2023-03-14
问题内容

我需要读取UDP流量,直到达到超时为止。我可以通过在UDPConn上调用SetDeadline并循环直到出现I /
O超时错误来做到这一点,但这似乎有些破绽(基于错误条件的流控制)。以下代码段似乎更正确,但不会终止。在生产中,这显然将在goroutine中执行;为了简单起见,它被编写为主要功能。

package main

import (
    "fmt"
    "time"
)

func main() {
    for {
        select {
        case <-time.After(time.Second * 1):
            fmt.Printf("Finished listening.\n")
            return
        default:
            fmt.Printf("Listening...\n")
            //read from UDPConn here
        }
    }
}

给定程序为什么不终止?基于https://gobyexample.com/select,https://gobyexample.com/timeouts和https://gobyexample.com/non-
blocking-channel-operations
,我希望上面的代码,选择默认的情况下,持续一秒钟,然后采取第一种情况并跳出循环。我如何修改上面的代码片段以达到所需的循环和读取效果,直到发生超时?


问题答案:

只需从循环time.After外部分配通道for,否则每次循环时将只创建一个新计时器。

例:

func main() {
    ch := time.After(time.Second * 1)
L:
    for {
        select {
        case <-ch:
            fmt.Printf("Finished listening.\n")
            break L // have to use a label or it will just break select
        default:
            fmt.Printf("Listening...\n")
            //read from UDPConn here
        }
    }
}

请注意,这在操场上不起作用。



 类似资料:
  • 我正在使用此代码: 我试图做的是获取网站的原始html。但是,当我运行代码时,我得到了这个错误: 我正在使用这段代码成功地获取多个其他网站的HTML,但这段代码不起作用。 有什么问题?我该如何解决? 编辑:在firefox中加载站点,从中获取cookie并将其传入: 使页面加载,但这并不好,因为它不能一遍又一遍地使用。

  • 我将kafka-connect docker映像()部署到ECS/fargate,为我的ECS服务分配了一个安全组,该安全组允许传入的zooper keeper和kafka bootstrap服务器通信量(纯文本和TLS),并分配了一个IAM角色,该角色允许我的ECS任务对MSK集群运行kafka操作,但connect集群在尝试从MSK集群获取代理列表时仍会超时。 在AWS中,kafka conn

  • 问题内容: 我有一个查询,该查询返回一行,其中一行包含一个字符串数组(): 有没有简单的方法可以直接将其读入Golang切片中?例如 产生: 问题答案: 正如Victor在原始帖子的评论中提到的那样,该帖子以的解释很好地回答了这个问题。 直接从链接中获取: 要将Postgres数组值读入Go切片,请使用: { log.Fatal(err) } 我也已经在自己的项目中使用了此功能,因此可以确认它是否

  • 我正在尝试使用spring ldap 1.3.1连接到windows server 2008上的ldap active directory。发布和ldap配置如下所示: ldap url是:ldap://dc.fabrikam.com 用户名:管理员 密码:123456 -Springldap配置如下: > LDAPContactDAO: -在异常之前调试: 尝试使用getAllContactNa

  • 问题内容: 在jersey 1中,我们在类中具有一个函数setConnectTimeout。 在球衣2中,缺少此功能的地方使用该类。 如何在jersey 2.x中设置连接超时并读取超时? 问题答案: 下面的代码在Jersey 2.3.1中对我有用(灵感在这里找到:https :

  • 在泽西1中,我们在类中有一个函数setConnectTimeout。 在jersey 2中,类用于缺少此函数的地方。 如何设置连接超时和读取超时在泽西2. x?