分享好友 编程语言首页 频道列表

go语言net包udp socket的使用

Golang  2023-02-08 20:560

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);
	}
}

go语言net包udp socket的使用

go语言net包udp socket的使用

查看更多关于【Golang】的文章

展开全文
相关推荐
反对 0
举报 0
评论 0
图文资讯
热门推荐
优选好物
更多热点专题
更多推荐文章
intellij idea go go go!
安装如下:1. intellij idea2. jdk-8u31-windows-x643.1. scala:Scala是一门多范式的编程语言,一种类似java的编程语言[1]  ,设计初衷是实现可伸缩的语言[2]  、并集成面向对象编程和函数式编程的各种特性。 2.IdeaVimEmulates Vim editorVim是一个类似

0评论2023-03-08586

go并发编程sync.Cond使用场景及实现原理
目录使用场景实现原理copyCheckerWaitSignalBroadcast使用场景sync.Cond是go标准库提供的一个条件变量,用于控制一组goroutine在满足特定条件下被唤醒。sync.Cond常用于一组goroutine等待,一个goroutine通知(事件发生)的场景。如果只有一个goroutine等待,

0评论2023-02-09798

Go保证并发安全底层实现详解 go高并发解决方案
目录引言CSPChannel的基本使用channel如何保证并发安全channel的底层实现waitqbuffeLock引言上一部分主要写了锁,本篇主要介绍Channelchannel是Go中非常重要的一个数据类型,它和goroutine紧密相连,是Go的CSP并发模型的重要体现。CSPCSP 是通信顺序进程(Com

0评论2023-02-09423

go语言 nil使用避坑指南
目录引言nil默认值nil (重点记住)nil没有默认类型不同类型的nil值占用的内存大小可能是不一样的不同类型 nil 的指针是一样的不同类型的 nil 是不能比较的引言今天笔试题遇到 var x string = nil ,问这个定义是否正确?这里给出答案:cannot use nil as strin

0评论2023-02-09808

Go操作Kafka和Etcd方法详解
目录操作Kafkasarama下载及安装注意事项连接 kafka 发送消息连接 kafka 消费消息操作Etcd安装put和get操作watch操作安装报错:操作KafkaKafka 是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据,具有高性能、持久化、

0评论2023-02-09731

Go语言开发保证并发安全实例详解 go语言处理高并发
目录什么是并发安全?Mutex悲观锁乐观锁版本号机制CAS互斥锁读写互斥锁什么是并发安全?在高并发场景下,进程、线程(协程)可能会发生资源竞争,导致数据脏读、脏写、死锁等问题,为了避免此类问题的发生,就有了并发安全。这里举一个简单的例子: var data

0评论2023-02-09421

Go中的应用配置管理详解 go配置中心
目录问题解决命令行参数系统环境变量打包进二进制文件配置热更新开源的fsnotify(1)安装(2)案例使用viper开源库实现热更新问题Go语言在编译时不会将配置文件这类第三方文件打包进二进制文件中它既受当前路径的影响,也会因所填写的不同而改变,并非是绝对

0评论2023-02-09562

Go语言包和包管理详解 go 常用包
目录1 包简介1.1 工作空间1.2 源文件1.3 包命名1.4 main 包2导包2.1 两种方式2.2 包的别名2.3 简洁模式2.4非导入模式(匿名导入)2.5 导包的路径2.6 远程导入3 初始化 init3.1 init总结4 包管理4.1 演变过程4.2 Go Model优点4.3 启用go module4.4 GOPROXY5 go m

0评论2023-02-09684

Go -- import使用及. _的作用解析
go中import用于导入包。导入之后就可以使用包中的代码。比如:123import(    "fmt")在代码中就可以使用fmt包中的方法,如:1fmt.Println("hello world")1、使用点操作引入包时,可以省略包前缀:123import(    . "fmt")注意上面 fmt前多了 . 字符。代码

0评论2023-02-09384

go爬虫之爬取豆瓣电影 爬虫怎么获取豆瓣上所有电影
go爬取豆瓣电影好久没使用go语言做个项目了,上午闲来无事花了点时间使用golang来爬取豆瓣top电影,这里我没有用colly框架而是自己设计简单流程。mark一下思路定义两个channel,一个channel存放web网页源内容,另一个存放提取后的有效内容。多个goroutine并发

0评论2023-02-09384

更多推荐