package main

import (
"fmt"
"net"
"strings"
) // UDP server func main() {
//源码:func ListenUDP(network string, laddr *UDPAddr) (*UDPConn, error) {
conn, err := net.ListenUDP("udp", &net.UDPAddr{
IP: net.IPv4(127, 0, 0, 1),
Port: 40000,
})
if err != nil {
fmt.Println("listen UDP failed,err:", err)
return
}
defer conn.Close() // 不需要建立连接,直接收发数据
// 收数据
var data [1024]byte
for {
//data[:]把数组变成byte类型的切片(引用类型,存到data数组中)
n, addr, err := conn.ReadFromUDP(data[:]) //参数是[]byte 切片类型里面是byte(uint8)
if err != nil {
fmt.Println("read from UDP failed,err:", err)
return
}
fmt.Println(data[:n])
reply := strings.ToUpper(string(data[:n]))
// 发送数据
//[]byte(reply) 把字符串转成字节类型的切片
conn.WriteToUDP([]byte(reply), addr)
}
} 
package main

import (
"bufio"
"fmt"
"net"
"os"
) // UDP client func main() {
//拨号
socket, err := net.DialUDP("udp", nil, &net.UDPAddr{
IP: net.IPv4(127, 0, 0, 1),
Port: 40000,
})
if err != nil {
fmt.Println("连接服务端失败,err:", err)
return
}
defer socket.Close()
var reply [1024]byte
reader := bufio.NewReader(os.Stdin)
for {
fmt.Print("请输入内容:")
msg, _ := reader.ReadString('\n') //读到一个换行就返回数据(结束)
socket.Write([]byte(msg))
// 收回复的数据
n, _, err := socket.ReadFromUDP(reply[:])
if err != nil {
fmt.Println("redv reply msg failed,err:", err)
return
}
fmt.Println("收到回复信息:", string(reply[:n]))
}
}

最新文章

  1. springmvc+bootstrap+jquerymobile完整搭建案例(提供下载地址)
  2. .NET短距离领域通信-32feet.NET
  3. 【转】详细分析Java中断机制
  4. mvc4 部署http错误403.14 forbidden
  5. gcd和ex_gcd
  6. Mininet的内部实现原理简介
  7. 代理和block反向传值
  8. IE 8兼容:X-UA-Compatible的解释
  9. JDK/bin目录下的不同exe文件的用途(转)
  10. Java SE Eclipse中引入第三方jar及class
  11. java3 - 流程控制
  12. 画一个DIV并给它的四个角变成圆形,且加上阴影
  13. UML学习——类之间的关系
  14. 上次被人说TK不好咯,这次给你整个高大上的
  15. 前端——HTML
  16. Some beautiful Progress Bars in WPF
  17. 虚幻开放日2017ppt
  18. 关掉 ubuntu bug 报告功能
  19. day7大纲
  20. js基础学习笔记(零七)

热门文章

  1. 注解配置springMVC
  2. 让bat文件自动以管理员身份运行
  3. linux C++ 读取mysql结果保存
  4. 1、腾讯云搭建Hadoop3集群
  5. The Number of Inversions(逆序数)
  6. 原生js判断设备类型
  7. babel 的简单使用
  8. idea软件操作
  9. Python之路Day11
  10. phpstorm更换主题