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

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

开发者学堂课程【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月前
|
Python
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
使用Python的socket库实现客户端到服务器端的图片传输,包括客户端和服务器端的代码实现,以及传输结果的展示。
133 3
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
|
1月前
|
JSON 数据格式 Python
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
本文介绍了如何使用Python的socket模块实现客户端到服务器端的文件传输,包括客户端发送文件信息和内容,服务器端接收并保存文件的完整过程。
142 1
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
|
1月前
|
网络协议 Ubuntu Linux
gpg从公钥服务器接收失败(gpg: keyserver receive failed: Server indicated a failure)
通过上述步骤,大多数情况下应该能够解决GPG从公钥服务器接收失败的问题。如果问题依旧存在,可能需要进一步调查与公钥服务器相关的更深层次的技术问题,或者考虑在相关社区论坛寻求帮助。
176 1
|
1月前
|
网络协议 Unix Linux
一个.NET开源、快速、低延迟的异步套接字服务器和客户端库
一个.NET开源、快速、低延迟的异步套接字服务器和客户端库
|
1月前
|
Python
Flask学习笔记(二):基于Flask框架上传图片到服务器端并原名保存
关于如何使用Flask框架上传图片到服务器端并以其原名保存的教程。
75 1
|
1月前
|
Python
Flask学习笔记(三):基于Flask框架上传特征值(相关数据)到服务器端并保存为txt文件
这篇博客文章是关于如何使用Flask框架上传特征值数据到服务器端,并将其保存为txt文件的教程。
31 0
Flask学习笔记(三):基于Flask框架上传特征值(相关数据)到服务器端并保存为txt文件
|
1月前
|
安全 区块链 数据库
|
6天前
|
机器学习/深度学习 人工智能 弹性计算
什么是阿里云GPU云服务器?GPU服务器优势、使用和租赁费用整理
阿里云GPU云服务器提供强大的GPU算力,适用于深度学习、科学计算、图形可视化和视频处理等多种场景。作为亚太领先的云服务提供商,阿里云的GPU云服务器具备灵活的资源配置、高安全性和易用性,支持多种计费模式,帮助企业高效应对计算密集型任务。
|
8天前
|
存储 分布式计算 固态存储
阿里云2核16G、4核32G、8核64G配置云服务器租用收费标准与活动价格参考
2核16G、8核64G、4核32G配置的云服务器处理器与内存比为1:8,这种配比的云服务器一般适用于数据分析与挖掘,Hadoop、Spark集群和数据库,缓存等内存密集型场景,因此,多为企业级用户选择。目前2核16G配置按量收费最低收费标准为0.54元/小时,按月租用标准收费标准为260.44元/1个月。4核32G配置的阿里云服务器按量收费标准最低为1.08元/小时,按月租用标准收费标准为520.88元/1个月。8核64G配置的阿里云服务器按量收费标准最低为2.17元/小时,按月租用标准收费标准为1041.77元/1个月。本文介绍这些配置的最新租用收费标准与活动价格情况,以供参考。
|
6天前
|
机器学习/深度学习 人工智能 弹性计算
阿里云GPU服务器全解析_GPU价格收费标准_GPU优势和使用说明
阿里云GPU云服务器提供强大的GPU算力,适用于深度学习、科学计算、图形可视化和视频处理等场景。作为亚太领先的云服务商,阿里云GPU云服务器具备高灵活性、易用性、容灾备份、安全性和成本效益,支持多种实例规格,满足不同业务需求。