zoukankan      html  css  js  c++  java
  • go语言net包udp socket的使用

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

  • 相关阅读:
    MySQL >>> 存储引擎
    MySQL >>> 基本操作语句
    MySQL >>> 使用安装
    协程 *单线程实现并发
    进程池 & 线程池
    线程 *知识点扩充
    进程 & 线程
    DRF单表序列化
    DRF
    接口规范
  • 原文地址:https://www.cnblogs.com/jkko123/p/7026887.html
Copyright © 2011-2022 走看看