go语言net包udp socket的使用

本文介绍了使用Go语言实现UDP客户端和服务端的过程。通过具体代码示例,展示了如何创建UDP连接、发送及接收数据包。此外,还对比了UDP与TCP在客户端请求处理上的区别。

udp与tcp的不同在于客户端请求方式不同,udp缺少Accept函数。

一个简单的udp客户端:

package main;

import (
	"net"
	"log"
	"fmt"
)

func chkError(err error) {
	if err != nil {
		log.Fatal(err);
	}
}

func main() {
	//获取udpaddr
	udpaddr, err := net.ResolveUDPAddr("udp4", "127.0.0.1:8080");
	chkError(err);
	//连接,返回udpconn
	udpconn, err2 := net.DialUDP("udp", nil, udpaddr);
	chkError(err2);
	//写入数据
	_, err3 := udpconn.Write([]byte("client\r\n"));
	chkError(err3);
	buf := make([]byte, 256);
	//读取服务端发送的数据
	_, err4 := udpconn.Read(buf);
	chkError(err4);
	fmt.Println(string(buf));
}

udp服务端代码:

package main;

import (
	"net"
	"log"
	"fmt"
)

func chkError(err error) {
	if err != nil {
		log.Fatal(err);
	}
}

func clientHandle(conn *net.UDPConn) {
	defer conn.Close();
	buf := make([]byte, 256);
	//读取数据
	//注意这里返回三个参数
	//第二个是udpaddr
	//下面向客户端写入数据时会用到
	_, udpaddr, err := conn.ReadFromUDP(buf);
	if err != nil {
		return;
	}
	fmt.Println(string(buf));
	conn.WriteToUDP([]byte("hello,client \r\n"), udpaddr);
}

func main() {
	udpaddr, err := net.ResolveUDPAddr("udp4", "127.0.0.1:8080");
	chkError(err);
	//监听端口
	udpconn, err2 := net.ListenUDP("udp", udpaddr);
	chkError(err2);
	//udp没有对客户端连接的Accept函数
	for {
		clientHandle(udpconn);
	}
}

转载于:https://www.cnblogs.com/jkko123/p/7026887.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值