1. 程式人生 > >go語言net包udp socket的使用

go語言net包udp socket的使用

tcp clas 請求方式 return fmt 讀取數據 print 簡單 cep

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的使用