GO语言初级学习之代码案例12 (UDP通信)

@(go语言 黑马)[GO语言]

UDP通信

  • 题目:编写UDP通信的并发服务器和客户端
  • 知识点:UDP通信
  • 逻辑思路(详细的步骤在代码注释中):

_1. 发送端 将文件名发送给 接收端
_2. 接收端 收到文件名后,发送 "ok" 信号给 发送端
_3. 发送端 收到 "ok" 信号后,开始传输文件内容给 接收端
_4. 接收端 接收并保存文件内容

服务器代码如下:

package main

import "fmt"

func main() {
    UdpCommunication()
}

//UDP服务器
func UdpCommunication() {
    //建立UDP客戶端连接,注意:返回的是服务器地址,不再是listener,不需要监听
    clientAddr, err := net.ResolveUDPAddr("udp", "127.0.0.1:8002")
    if err != nil {
        fmt.Println("net.ResolveUDPAddr err:", err)
        return
    }
    fmt.Println("clientAddr",clientAddr)

    //建立通信socket,使用服务器地址建立
    conn, err := net.ListenUDP("udp", clientAddr)
    if err != nil {
        fmt.Println("net.ListenUDP err:", err)
        return
    }
    defer conn.Close()

    buf := make([]byte, 4096)
    for {//循环处理客户端数据
        n, UdpAddr, err := conn.ReadFromUDP(buf)//返回值多了一个客户端地址
        //fmt.Println("UdpAddr:",UdpAddr)//打印客户端地址
        if err != nil {
            fmt.Println("conn.ReadFromUDP err:", err)
            return
        }
        fmt.Println("读到客户端数据:", string(buf[:n]))

        timeNow := time.Now().String()//现在时间
        conn.WriteToUDP([]byte(timeNow), UdpAddr)
    }
}

客户端代码如下:

package main

import "fmt"

func main() {
    Client()
}
func Client() {
    conn, err := net.Dial("udp", "127.0.0.1:8002")//与服务器建立连接,协议必须小写
    if err != nil {
        fmt.Println("net.Dial err:", err)
        return
    }
    defer conn.Close()//不要忘记关闭

    for {//循环发送请求
        requst := make([]byte, 4096)
        n, err := os.Stdin.Read(requst)
        //os.Stdin是标准输入,返回的是一个文件指针,所以后面直接可以读取数据到缓冲切片中
        if err != nil {
            fmt.Println("os.Stdin.Read err:", err)
            return
        }

        conn.Write(requst[:n])

        buf := make([]byte, 4096)
        n, err = conn.Read(buf)
        if err != nil {
            fmt.Println("conn.Read err:", err)
            return
        }
        fmt.Println("读到客户端回发数据:", string(buf[:n]))
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,264评论 19 139
  • @(go语言 黑马)[GO语言] 通过TCP通信完成两端的文件传输 题目:分别搭建好文件的发送端和接收端 知识点:...
    大爬虫Shalom阅读 2,994评论 0 0
  • 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编...
    程序员欧阳阅读 6,177评论 1 37
  • 计算机网络概述 网络编程的实质就是两个(或多个)设备(例如计算机)之间的数据传输。 按照计算机网络的定义,通过一定...
    蛋炒饭_By阅读 5,080评论 0 10
  • 决定尝试着把天气应用上传至应用市场,选定是豌豆荚。既然要上传至应用市场,那应该需要为app添加统计SDK,在此选用...
    chenmingzhi阅读 6,822评论 1 1

友情链接更多精彩内容