文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Golang TCP服务器 - 实现客户端之间的数据交流

2024-04-04 23:09

关注

“纵有疾风来,人生不言弃”,这句话送给正在学习Golang的朋友们,也希望在阅读本文《Golang TCP服务器 - 实现客户端之间的数据交流》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新Golang相关的技术文章,有好的建议欢迎大家在评论留言,非常感谢!

问题内容

我正在寻找在 go 中实现一个 tcp 服务器,它应该能够从一个客户端接收数据并将其发送到另一个客户端。实现这一目标的正确方法是什么?我尝试了以下代码:

astSrc := *addr + ":" + strconv.Itoa(*astPort)
astListener, _ := net.Listen("tcp", astSrc)
fmt.Printf("Listening on %s for Client Connections.\n", astSrc)

defer astListener.Close()

pmsSrc := *addr + ":" + strconv.Itoa(*pmsPort)
pmsListener, _ := net.Listen("tcp", pmsSrc)
fmt.Printf("Listening on %s for DB Connections.\n", pmsSrc)

defer pmsListener.Close()

for {
pmsConn, pmsErr := pmsListener.Accept()

if pmsErr != nil {
    fmt.Printf("Some connection error: %s\n", pmsErr)
}

go handlePMSConnection(pmsConn)

astConn, astErr := astListener.Accept()

if astErr != nil {
    fmt.Printf("Some connection error: %s\n", astErr)
}
go handleAstConnection(astConn, pmsConn)
}

我想为每个客户端使用 2 个不同的端口(astsrc - 这是短时间连接,pmssrc - 永久连接)并为每个客户端创建 2 个侦听器。我希望能够从连接到 astsrc 端口的 client-1 接收消息,并将其传递到 client-2(pmssrc 端口)。到目前为止,此代码可以正常工作,但如果 client-1 断开连接然后又连接回来 - 服务器将不再接受任何消息。我不知道在同一循环中处理两个连接是否正确,我认为这就是问题所在,但如果我从循环中取出一个连接,那么该连接将无法访问。你能指出我正确的方向吗?


解决方案


问题似乎是您获得的每个 ast 连接都需要一个 pms 连接,在循环中插入您的 ast 连接的接受可能会解决您眼前的问题,就像这样

for {
    pmsConn, pmsErr := pmsListener.Accept()

    if pmsErr != nil {
        fmt.Printf("Some connection error: %s\n", pmsErr)
    }

    go handlePMSConnection(pmsConn)
    for {
        astConn, astErr := astListener.Accept()

        if astErr != nil {
            fmt.Printf("Some connection error: %s\n", astErr)
        }
        go handleAstConnection(astConn, pmsConn)
    }
}

但是如果你失去了 pms 连接就会出现问题,如果你获得多个 ast 连接会发生什么。并且您需要在 ast 连接之前连接 pms 连接。

好了,本文到此结束,带大家了解了《Golang TCP服务器 - 实现客户端之间的数据交流》,希望本文对你有所帮助!关注编程网公众号,给大家分享更多Golang知识!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯