登录
首页 >  Golang >  Go问答

与多个客户端通信的UDP服务器的go语言实现方法

来源:stackoverflow

时间:2024-03-13 19:03:27 444浏览 收藏

怎么入门Golang编程?需要学习哪些知识点?这是新手们刚接触编程时常见的问题;下面golang学习网就来给大家整理分享一些知识点,希望能够给初学者一些帮助。本篇文章就来介绍《与多个客户端通信的UDP服务器的go语言实现方法》,涉及到,有需要的可以收藏一下

问题内容

我有一台通过 udp 传输文件的服务器,当只有一个客户端时它运行良好,但如果其他客户端尝试连接,则会引发以下错误

listen udp :20000:bind:每个套接字地址仅使用一次 (协议/网络地址/端口)通常是允许的。

这是我在 main 中的代码:

...
fmt.println("input the number of connections")
var number int
fmt.scanln(&number)

var wg sync.waitgroup
wg.add(number)

ladd, err := net.resolveudpaddr("udp", port)
if err != nil {
    fmt.println(err)
    return
}

for i:=0; i < number; i++ {
    go startconnection(ladd, file, i, wg)
}
wg.wait()

这是startconnection的代码:

func startConnection (lAdd * net.UDPAddr, archivo string, i int, wg sync.WaitGroup) {

defer wg.Done()

conn, err := net.ListenUDP("udp", lAdd)
if err != nil {
    logger.Println("There was an error: ", err)
    return
}

defer conn.Close()

sendFile (conn, add, archivo, i)
}

解决方案


服务器应该仅调用 Listen 一次来启动侦听器。那时,它正在倾听。由于协议的性质,这就是 TCP 和 UDP 的分歧点。

ListenTCP 返回一个 TCPListener,可用于 Accept 连接进来。然后每个连接都可以发送和接收数据。

ListenUDP 返回一个 UDPConn,与 DialUDP 相同,因为 UDP 是无连接协议。您只需读取和写入 UDPConn。 UDP数据包头包含源和目标信息,因此您可以使用ReadFrom读取数据并查看发送者,并使用WriteTo响应特定客户端。

This article (saved by archive.org) 有一个关于在 Go 中实现 UDP 连接的非常全面的概述。

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《与多个客户端通信的UDP服务器的go语言实现方法》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>