Go语言实现UDP版聊天小工具的示例详解
要看tcp版的小伙伴请移步:聊天小工具tcp版本
udp版本和tcp版本很像,都是分为server端和client端,具体代码如下
代码实现
server.go
- package main
- import (
- “bufio”
- “fmt”
- “io”
- “net”
- “os”
- “strings”
- )
- // 监听UDP协议进行通信
- func main() {
- // 建通udp端口, 传入协议名称与,UDPAddr类型的地址与端口
- listen, err := net.ListenUDP(“udp”, &net.UDPAddr{
- IP: net.IPv4(127, 0, 0, 1),
- Port: 10000,
- })
- if err != nil {
- fmt.Println(“listen udp port failed err:”, err)
- return
- }
- // 函数结束关闭连接
- defer listen.Close()
- // 发送与接受数据
- for {
- var baby [1024]byte
- reader := bufio.NewReader(os.Stdin)
- // 接受数据,传入切片类型对象,baby[:]表示切片类型吗,返回字节数与发送端地址与错误信息
- n, addr, err := listen.ReadFromUDP(baby[:])
- if err == io.EOF {
- fmt.Println(“read ok, “, err)
- continue
- }
- if err != nil {
- fmt.Println(“read data failed, err:”, err)
- continue
- }
- fmt.Printf(“Client:%v, remoteaddr:%v bytes:%v\n”, string(baby[:n]), addr, n)
- // 发送数据
- fmt.Print(“Server:”)
- // 对输入对内容进行格式输出,对特殊字符进行转义,传入的字节返回的字符串
- text, _ := reader.ReadString(‘\n’)
- // 去掉开头或结尾的空格
- msg := strings.TrimSpace(text)
- _, err = listen.WriteToUDP([]byte(msg), addr)
- if err != nil {
- fmt.Println(“write to udp failed, err:”, err)
- continue
- }
- }
- }
client.go
- package main
- import (
- “bufio”
- “fmt”
- “net”
- “os”
- “strings”
- )
- func main() {
- // 与远端udp进行通信, 传入协议名称与,UDPAddr类型的地址与端口
- listen, err := net.DialUDP(“udp”, nil, &net.UDPAddr{
- IP: net.IPv4(127, 0, 0, 1),
- Port: 10000,
- })
- if err != nil {
- fmt.Println(“connection udp port failed,err:”, err)
- return
- }
- // 函数结束关闭连接
- defer listen.Close()
- // 发送与接受数据
- var baby [1024]byte
- for {
- // 发送数据
- fmt.Print(“Client:”)
- reader := bufio.NewReader(os.Stdin)
- text, _ := reader.ReadString(‘n’)
- // 去掉开头或结尾的空格
- msg := strings.TrimSpace(text)
- if msg == “exit” {
- return
- }
- _, err = listen.Write([]byte(msg))
- if err != nil {
- fmt.Println(“发送数据失败,err:”, err)
- return
- }
- // 接受数据
- n, desaddr, err := listen.ReadFromUDP(baby[:])
- if err != nil {
- fmt.Println(“接收数据失败,err:”, err)
- return
- }
- fmt.Printf(“Server:%v remoteaddr:%v bytes:%v\n”, string(baby[:n]), desaddr, n)
- }
- }
运行效果
D:\Software\godata\src\0115\demo\client>go run main.go
Client:你好
Server:滚 remoteaddr:127.0.0.1:10000 bytes:3
Client:好的
Server:….. remoteaddr:127.0.0.1:10000 bytes:5
Client:exit
到此这篇关于Go语言实现UDP版聊天小工具的示例详解的文章就介绍到这了,更多相关Go语言聊天工具内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
发表评论