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

  • 相关阅读:
    POJ 2431 Expedition(探险)
    POJ 3253 Fence Repair(修篱笆)
    POJ 3069 Saruman's Army(萨鲁曼军)
    POJ 3617 Best Cow Line(最佳奶牛队伍)
    [蓝桥杯] 排它平方数
    [蓝桥杯] 小朋友排队
    UVA315 Network 连通图割点
    POJ 1236 Network of Schools 连通图缩点
    poj1061 青蛙的约会
    拓展欧几里
  • 原文地址:https://www.cnblogs.com/jkko123/p/7026887.html
Copyright © 2011-2022 走看看