Golang Go语言中竟然不能直接发送 UDP 包

发布于 1周前 作者 nodeper 来自 Go语言

TCP 用 dial 可以理解,我只是想单纯的发送一个 UDP 包 为什么也要用 net.DialUDP() 。
反观 python ,一个 sendto() 简单明了。
第一次对 golang 有些失望。
Golang Go语言中竟然不能直接发送 UDP 包

16 回复

…你是来搞笑的吗?

更多关于Golang Go语言中竟然不能直接发送 UDP 包的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


信不信会有 go 粉开 1 万个 gorountine 嘲讽你……

1 万个哪里够,要百万并发嘲讽(

调用 DialUDP 是为了在本地打开一个 UDP 端口,这样才能开始 UDP 通讯。

叫 Dial 只是习惯吧。

你是凯蒂吗

google 搜 golang udp 第一个就是例子,你是蠢还是懒?




不多说,自己去试试就知道了。不了解情况就嘲讽是真的无知。

此时, Java 躲在角落里不敢发声

因为这是个接口

说来 golang 的 UDPConn 不是有 WriteTo 吗

go<br>func main() {<br> conn,err :=net.Dial("udp","127.0.0.1:9897")<br> if err != nil {<br> log.Fatal(err)<br> }<br> defer conn.Close()<br> conn.Write([]byte(""))<br> data := make([]byte, 1024)<br> n,err:=conn.Read(data)<br> if err != nil {<br> log.Fatal(err)<br> }<br> fmt.Println(string(data[:n]))<br>}<br>
刚学 go ,试了一下可以的

楼主要的是先 bind 再 recv/sendto

不是说吹捧 Go 但这个黑实在好低级。。。自己写个 func sendto() 不就结了吗。。被语言惯坏了?

另外没怎么用过 Python 但是官网也是要先创建对象才能 sendto : https://wiki.python.org/moin/UdpCommunication 所以你说的 “一个 sendto() 简单明了。 ” 在我看来说难听点叫如同放屁。。。。

我竟然他妈的还这么耐心地对比了???

在Golang(Go语言)中,虽然标准库没有直接提供一个类似于TCP那样高级的封装来发送UDP包,但确实提供了底层接口来操作UDP。通过net包中的net.UDPConn类型,开发者可以很方便地发送和接收UDP数据包。

以下是一个简单的示例,展示了如何在Go中发送UDP包:

package main

import (
	"fmt"
	"net"
)

func main() {
	// 目标地址和端口
	addr := net.UDPAddr{
		Port: 12345,
		IP:   net.ParseIP("127.0.0.1"),
	}

	// 建立UDP连接
	conn, err := net.DialUDP("udp", nil, &addr)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	defer conn.Close()

	// 要发送的数据
	message := []byte("Hello, UDP!")

	// 发送数据
	_, err = conn.Write(message)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}

	fmt.Println("Message sent successfully")
}

在这个例子中,我们首先定义了一个UDP地址(包括IP和端口),然后通过net.DialUDP函数建立了一个UDP连接。接着,我们使用conn.Write方法发送了数据。这个过程相对直接,但需要手动管理连接和地址等细节。

因此,虽然Go语言没有为UDP提供像TCP那样的高级封装,但通过net.UDPConn和相关的函数,我们仍然能够高效地发送和接收UDP数据包。

回到顶部