首页 > 解决方案 > 你如何通过 PacketConn.WriteTo 发送数据包?

问题描述

我想设置一个 PacketConn 接口,然后将任意 UDP 消息发送到用户输入的指定地址。这是我的代码:

package main
import (
    "fmt"
    "net"
    "time"
)

//Make a type that implemets https://golang.org/pkg/net/#Addr
type remoteAddress struct {
    myAddress string
}

func (r remoteAddress) Network() string {
    return "udp"
}

func (r remoteAddress) String() string {
    return r.myAddress
}

func writePeer(pc net.PacketConn, addr net.Addr){
    for{
        if _, err := pc.WriteTo([]byte("hi"), addr); err != nil {
            panic(err)
        }

        time.Sleep(time.Second/3)
    }
}

func main(){
    pc, err := net.ListenPacket("udp", ":0")
    if err != nil {
        fmt.Println(err)
    }

    var userInput remoteAddress
    userInput.myAddress = "99.84.243.36:80"

    go writePeer(pc, userInput)

    select{}

}

当程序运行时,我收到错误: panic: write udp [::]:57057->99.84.243.36:80: invalid argument 我的代码有什么问题?

标签: gonetwork-programming

解决方案


这是工作代码:

package main
import (
    "fmt"
    "net"
    "time"
)



func writePeer(pc net.PacketConn, addr net.Addr){
    for{
        if _, err := pc.WriteTo([]byte("hi"), addr); err != nil {
            panic(err)
        }

        time.Sleep(time.Second/3)
    }
}

func main(){
    pc, err := net.ListenPacket("udp", ":0")
    if err != nil {
        fmt.Println(err)
    }

    userInput, err := net.ResolveUDPAddr("udp", "99.84.243.36:80")

    go writePeer(pc, userInput)

    select{}

}

推荐阅读