【GO语言】实现UDP—C/S设计模式的服务器server端与客户client端【并发】通信

GO语言实现TCP—C/S设计模式的服务器server端与客户client端【并发】通信

项目总览:

1.开发语言:GO语言
2.IDE:Goland
3.开发用时:十分钟
4.源码已上传到我的GitHub,链接:https://github.com/2394799692/UDP 或点此跳转
5.基础知识请参考上一篇文章:【GO语言】实现UDP—C/S设计模式的服务器server端与客户client端即时通信


以下是本篇文章正文内容,欢迎朋友们进行指正,一起探讨,共同进步。——来自考研路上的lwj。QQ:2394799692

说明:UDP的并发和基础的通信模式差别不大,这一章了解即可,我直接把代码放出来,只改动了一小点部分,大家有兴趣可以自己测试一下,重点还是要掌握好TCP的通信。

一、服务器端代码展示

package main

import (
	"fmt"
	"net"
	"time"
)

func main() {
	//组织一个udp地址结构,指定服务器的IP+port
	//srvAddr是地址结构
	srvAddr, err := net.ResolveUDPAddr("udp", "127.0.0.1:8006")
	//访问命令:nc -u 127.0.0.1 8006
	if err != nil {
		fmt.Println("ResolveUDPAddr err:", err)
		return
	}
	fmt.Println("udp 服务器地址结构,创建完成!!!")
	//创建用户通信的socket:udpConn
	udpConn, err := net.ListenUDP("udp", srvAddr)
	if err != nil {
		fmt.Println("ListenUD err:", err)
		return
	}
	defer udpConn.Close()
	fmt.Println("udp 服务器socket,创建完成!!!")
	//读取客户端发送的数据
	buf := make([]byte, 4096)

	for {
		//返回3个值。分别是读取到的字节数,客户端的地址,error
		n, cltAddr, err := udpConn.ReadFromUDP(buf) //每有一个客户端连接上来,启动一个go程写数据
		if err != nil {
			fmt.Println("ReadFromUDP err:", err)
			return
		}
		//模拟处理数据
		fmt.Printf("服务器读到%vd的数据:%s\n", cltAddr, string(buf[:n]))
		//提取系统当前时间
		go func() { //每有一个客户端连接上来,启动一个go程写数据
			daytime := time.Now().String() + "\n"
			//回写数据给客户端
			_, err = udpConn.WriteToUDP([]byte(daytime), cltAddr)
			if err != nil {
				fmt.Println("WriteToUDP err:", err)
				return
			}
		}()

	}

}



二、客户端代码展示

package main

import (
	"fmt"
	"net"
	"time"
)

func main() {
	//指定服务器 ip+port创建通信套接字
	conn, err := net.Dial("udp", "127.0.0.1:8006")
	if err != nil {
		fmt.Println("net.dial err:", err)
		return
	}
	defer conn.Close()
	for {
		//主动写数据给服务器
		conn.Write([]byte("are you ready?"))
		buf := make([]byte, 4096)
		//接收服务器回发的数据
		n, err := conn.Read(buf)
		if err != nil {
			fmt.Println("conn.Read err:", err)
			return
		}
		//处理数据,打印
		fmt.Println("服务器回发:", string(buf[:n])) //读了多少显示多少
		time.Sleep(time.Second)                //一秒启动一次
	}

}




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

立志冲海大

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值