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

      

  • 相关阅读:
    2.0 C++远征:隐藏
    1.0 C++远征:为什么继承
    15.0 C++远征:常指针和常引用
    14.0 C++远征:常对象成员和常成员函数
    13.0 C++远征:this指针
    12.0 C++远征:对象成员指针
    Sql语句
    斐波那契 递归 求某一个数
    WebAPI 和 WebService的区别
    获取用户IP
  • 原文地址:https://www.cnblogs.com/yunweiqiang/p/12556725.html
Copyright © 2020-2023  润新知