服务器循环接收客户端消息|学习笔记

简介: 快速学习服务器循环接收客户端消息

开发者学堂课程【Go 语言核心编程 - 面向对象、文件、单元测试、反射、TCP 编程:服务器循环接收客户端消息】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/626/detail/9781


服务器循环接收客户端消息

 

内容介绍

一、具体完善内容

二、注意事项

 

一、具体完善内容

将作业:要求在之前的基础上完成可以循环地输入内容,能够通过终端输入数据(输入一行送一行),并发送给服务端[],在终端输入 exit,表示退出程序进行完善,让其在客户端不再退出而是做 for 循环。打开 client.go,ReadString 应该进行 for 循环,将fmt.Printf(“客户端发送了%d 字节的数据,并退出“,n)删除,再将其包裹调整,如下:

for {

//从终端读取一行用户输入,并准备发送给服务器

line, err : = reader.Readstring("\n')

if err != nil {

fmt.Println("readString err=", err)

}

//再将 line 发送给 服务器

_,err = conn.Write([ ]byte(line))

if err != nil {

fmt.Println("conn.write err=", err)

}

}

在发送时并没有办法退出,所以要做一个判断,如下:

// 如果用户输入的是 exit 就退出

if line ==“exit“ {

fmt.Println(客户端退出..”)

break

}

但此时是不正确的,本身是存在\n 的,进行比较时要将 line 进行处理,将其除去,如下:

strings.Trim(line,”\r\n”)

但如果进行这样的操作,需要引入包,如下:

package main

import (

"fmt"

"net"

"bufio"

"os"

"strings"

)

此时,要同时考虑到服务端 server,在以上运行中,循环服务器的情况如下:

image.png

但此时如果不回车则会一直等待,要将 server 提示信息去除后循环结果如下:image.png

此时并没有进行换行,要_,err = conn.Write([ ]byte(line))后加入_,err = conn.Write([ ]byte(line + “\n”)),再进行运行,进入到客户端,进入到 cmd,写入go run client.go 进行连接,则循环结果如下:image.png

而切换为两个客户端连接时,是可以进行区分的,如下:

image.png

此时已经完成两个客户端到一个服务器端,而一个服务器端可以协程两个客户端进行服务,在进行退出时也可以捕获到客户端的退出。

此时的模式是 A 客户端与服务器端进行交互,如果 A 客户端与B客户端要进行交互,则服务器端的内容与功能要增加,可以在协程中拿到 B 客户端的连接。

对 client.go 进行了改进,划线区域如下:

for {

//从终端读取一行用户输入,并准备发送给服务器

line, err : = reader.Readstring("\n')

if err != nil {

fmt.Println("readString err=", err)

}

// 如果用户输入的是 exit 就退出

line = strings.Trim(line,”\r\n”)

if line ==“exit“ {

fmt.Println(客户端退出..”)

break

}

//再将 line 发送给服务器

_,err = conn.Write([ ]byte(line + “\n”))

if err != nil {

fmt.Println("conn.write err=", err)

}

}

 

二、注意事项

如果写为 fmt.Print(string(buf)),会出现一些错误,字节里可能预先有一些内容,buf 后面的内容可会会导致其出现一些问题,如下:

image.png

此时内容会出现空格而排在后面,写为 fmt.Print(string(buf[:n]))是正确的。

相关文章
|
1月前
|
存储 SQL 安全
什么是传统的客户端服务器模式架构
什么是传统的客户端服务器模式架构
31 0
|
4天前
|
网络协议 Dubbo Java
【网络编程】理解客户端和服务器并使用Java提供的api实现回显服务器
【网络编程】理解客户端和服务器并使用Java提供的api实现回显服务器
9 0
|
5天前
|
JavaScript 前端开发 搜索推荐
Vue 的服务器端渲染(SSR)和客户端渲染(CSR)在渲染过程、性能、用户体验等方面都存在显著的区别
【5月更文挑战第8天】Vue 的 SSR 和 CSR 在渲染上有明显差异。SSR 服务器端生成 HTML 返回给浏览器,提供更快首屏加载和更好的 SEO,但增加服务器负担。CSR 客户端渲染,首次加载可能较慢,但交互更流畅,开发更简单。两者各有优劣,需根据项目需求权衡选择。
12 2
|
12天前
|
Apache 项目管理 数据安全/隐私保护
Windows安装TortoiseSVN客户端结合Cpolar实现公网提交文件到本地服务器
Windows安装TortoiseSVN客户端结合Cpolar实现公网提交文件到本地服务器
|
13天前
|
Apache 项目管理 数据安全/隐私保护
TortoiseSVN客户端如何安装配置并实现公网访问服务端提交文件到本地服务器
TortoiseSVN客户端如何安装配置并实现公网访问服务端提交文件到本地服务器
|
14天前
|
监控 安全 持续交付
【专栏】Webhook是服务器主动发送事件通知的机制,打破传统客户端轮询模式,实现数据实时高效传递。
【4月更文挑战第29天】Webhook是服务器主动发送事件通知的机制,打破传统客户端轮询模式,实现数据实时高效传递。常用于持续集成部署、第三方服务集成、实时数据同步和监控告警。具有实时性、高效性和灵活性优势,但也面临安全风险和调试挑战。理解并善用Webhook能提升系统性能,广泛应用于现代软件开发和集成。
|
1月前
|
网络协议 Python
python中TCP回声服务器与客户端示例
【4月更文挑战第7天】本示例展示了TCP回声服务器和客户端的工作流程。服务器监听特定端口,接收客户端连接请求,接收数据并回显。客户端连接服务器,发送数据并接收回显。代码示例用Python实现,包括服务器的`socket.bind()`, `socket.listen()`, `socket.accept()`和客户端的`socket.connect()`, `socket.sendall()`, `socket.recv()`。运行示例时,先启动服务器再启动客户端,可观察TCP连接和数据传输过程。了解这些基础对于构建网络应用至关重要。
|
3天前
|
弹性计算 运维 监控
解密阿里云弹性计算:探索云服务器ECS的核心功能
阿里云ECS是核心计算服务,提供弹性云服务器资源,支持实例按需配置、集群管理和监控,集成安全防护,确保服务稳定、安全,助力高效业务运营。
23 0
|
1天前
|
弹性计算 运维 安全
阿里云ecs使用体验
整了台服务器部署项目上线
|
3天前
|
负载均衡 固态存储 Linux
阿里云轻量应用服务器、云服务器、gpu云服务器最新收费标准参考
轻量应用服务器、云服务器、gpu云服务器是阿里云服务器产品中,比较热门的云服务器产品类型,不同类型的云服务器产品收费模式与收费标准是不一样的,本文为大家展示这几个云服务器产品的最新收费标准情况,以供参考。
阿里云轻量应用服务器、云服务器、gpu云服务器最新收费标准参考

热门文章

最新文章