Go语言网络通信---连续通信的UDP编程

Server:

package main

import (
	"fmt"
	"net"
)

func main() {

	//创建udp地址
	udpAddr, _ := net.ResolveUDPAddr("udp", "127.0.0.1:8080")

	//服务端建立监听
	serverConn, err := net.ListenUDP("udp", udpAddr)
	if err == nil{
		fmt.Println("正在8080端口监听。。。")
	}else {
		fmt.Println(err)
		return
	}

	defer func() {
		serverConn.Close()
		fmt.Println("main over!")
	}()

	//与客户端IO
	//建立1024字节缓冲区
	buffer := make([]byte, 1024)

	for {
		/*
		读取客户端消息到缓冲区
		n = 读取到buffer中的字节数
		remoteAddress = 数据包的来源地址
		err = 超时等错误
		*/
		n, remoteAddress, _ := serverConn.ReadFromUDP(buffer)

		//从buffer读取数据
		contents := buffer[:n]

		//打印读到的地址和数据
		fmt.Printf("客户端:%v %v\n",remoteAddress,string(contents))

		//回复本条消息
		serverConn.WriteToUDP([]byte("孽障!"), remoteAddress)
	}

}

  

Client:

package main

import (
	"fmt"
	"net"
)

func main() {
	//使用udp协议拨号,远程地址127.0.0.1:8080
	conn, _ := net.Dial("udp", "127.0.0.1:8080")

	//程序退出前关闭连接,释放io资源
	defer func() {
		conn.Close()
		fmt.Println("客户端已退出")
	}()

	//创建接收消息的缓冲区
	buffer := make([]byte, 1024)
	//用户要发送的消息文本
	var userInput string
	for{
		//接收用户输入
		fmt.Print("大神请输入:")
		fmt.Scan(&userInput)
		//如果用户输入exit则退出
		if userInput == "exit"{
			break
		}
		//客户端发起交谈
		conn.Write([]byte(userInput))

		//接收服务端消息
		n, err := conn.Read(buffer)
		fmt.Println(err)
		fmt.Println("服务端:"+string(buffer[:n]))
	}
}

  

posted @ 2020-03-24 08:32  Ethan_Cheng  阅读(398)  评论(0编辑  收藏  举报