Go语言实现UDP版聊天小工具的示例详解
作者:哼嘿哈嘿
这篇文章主要为大家详细介绍了如何利用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语言聊天工具内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
