go - 你如何通过 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
我的代码有什么问题?
解决方案
这是工作代码:
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{}
}
推荐阅读
- c# - 如何从 json 中删除根节点?
- amazon-web-services - dynamodb 可以根据它保存的某些数据行发送到 sns
- amazon-web-services - 接收错误属性验证失败:[属性值 {/TableInput/ViewOriginalText} 与类型 {String} 不匹配] AWS cloudformation
- html - Excel VBA宏用单元格中的粗体文本替换Html粗体标记
- java - mysqld:无法读取 '/etc/mysql/conf.d/' 的目录(操作系统 errno 13 - 权限被拒绝)
- javascript - 查询参数在车把中不起作用
- c - 当结构足够大时,为什么 malloc 顺序很重要?
- python - 导入多个子目录/模块,就好像它们只是一个模块一样
- java - 如何将此迭代语句转换为递归语句?
- reactjs - 为什么我的样式化组件悬停效果不起作用