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

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

开发者学堂课程【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]))是正确的。

相关文章
|
9天前
|
存储 人工智能 自然语言处理
ChatMCP:基于 MCP 协议开发的 AI 聊天客户端,支持多语言和自动化安装 MCP 服务器
ChatMCP 是一款基于模型上下文协议(MCP)的 AI 聊天客户端,支持多语言和自动化安装。它能够与多种大型语言模型(LLM)如 OpenAI、Claude 和 OLLama 等进行交互,具备自动化安装 MCP 服务器、SSE 传输支持、自动选择服务器、聊天记录管理等功能。
75 15
ChatMCP:基于 MCP 协议开发的 AI 聊天客户端,支持多语言和自动化安装 MCP 服务器
|
29天前
|
开发框架 .NET C#
在 ASP.NET Core 中创建 gRPC 客户端和服务器
本文介绍了如何使用 gRPC 框架搭建一个简单的“Hello World”示例。首先创建了一个名为 GrpcDemo 的解决方案,其中包含一个 gRPC 服务端项目 GrpcServer 和一个客户端项目 GrpcClient。服务端通过定义 `greeter.proto` 文件中的服务和消息类型,实现了一个简单的问候服务 `GreeterService`。客户端则通过 gRPC 客户端库连接到服务端并调用其 `SayHello` 方法,展示了 gRPC 在 C# 中的基本使用方法。
39 5
在 ASP.NET Core 中创建 gRPC 客户端和服务器
|
2月前
|
Python
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
使用Python的socket库实现客户端到服务器端的图片传输,包括客户端和服务器端的代码实现,以及传输结果的展示。
165 3
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
|
2月前
|
网络协议 Ubuntu Linux
gpg从公钥服务器接收失败(gpg: keyserver receive failed: Server indicated a failure)
通过上述步骤,大多数情况下应该能够解决GPG从公钥服务器接收失败的问题。如果问题依旧存在,可能需要进一步调查与公钥服务器相关的更深层次的技术问题,或者考虑在相关社区论坛寻求帮助。
393 1
|
2月前
|
网络协议 Unix Linux
一个.NET开源、快速、低延迟的异步套接字服务器和客户端库
一个.NET开源、快速、低延迟的异步套接字服务器和客户端库
|
2月前
|
Python
Flask学习笔记(二):基于Flask框架上传图片到服务器端并原名保存
关于如何使用Flask框架上传图片到服务器端并以其原名保存的教程。
90 1
|
2月前
|
Python
Flask学习笔记(三):基于Flask框架上传特征值(相关数据)到服务器端并保存为txt文件
这篇博客文章是关于如何使用Flask框架上传特征值数据到服务器端,并将其保存为txt文件的教程。
34 0
Flask学习笔记(三):基于Flask框架上传特征值(相关数据)到服务器端并保存为txt文件
|
2月前
|
安全 区块链 数据库
|
6天前
|
弹性计算 运维 安全
阿里云轻量应用服务器与ECS的区别及选择指南
轻量应用服务器和云服务器ECS(Elastic Compute Service)是两款颇受欢迎的产品。本文将对这两者进行详细的对比,帮助用户更好地理解它们之间的区别,并根据自身需求做出明智的选择。
|
7天前
|
SQL 弹性计算 安全
阿里云上云优选与飞天加速计划活动区别及购买云服务器后续必做功课参考
对于很多用户来说,购买云服务器通常都是通过阿里云当下的各种活动来购买,这就有必要了解这些活动的区别,同时由于活动内的云服务器购买之后还需要单独购买并挂载数据盘,还需要设置远程密码以及安全组等操作之后才能正常使用云服务器。本文就为大家介绍一下目前比较热门的上云优选与飞天加速计划两个活动的区别,以及通过活动来购买云服务器之后的一些必做功课,确保云服务器可以正常使用,以供参考。