Golang--网络编程
1、概念
网络编程:把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大、功能强的网络系统,从而使众多的计算机可以方便地互相传递信息、共享数据、软件、数据信息等资源。
客户端(Client)
客户端是请求服务的计算机或程序,它可以是桌面应用、移动应用或网页应用。客户端通常负责用户界面的呈现和用户输入的处理。用户通过客户端向服务器发送请求,通常包括想要访问的数据或资源的具体信息。例如,当你在浏览器中输入一个网址时,浏览器就是客户端,它向相应的服务器发送请求来获取页面信息。
服务器端(Server)
服务器端是提供服务的计算机或程序,它接收来自客户端的请求并做出响应。服务器通常负责处理数据、运行业务逻辑、存储数据和管理网络资源。响应可以是所请求的数据、处理结果,或者是其他要求的资源。例如,当服务器接收到来自浏览器的请求时,它会查找相应的网页文件并将其发送回客户端。
设备之间在网络中进行数据的传输/接收数据。
通信两个重要的要素:IP + PORT
设备之间进行传输的时候,必须遵照一定的规则 ----> 通信协议:
TCP协议:可靠的
1、建立连接:三次握手
2、释放连接:
UDP协议:不可靠的
2、TCP编程 -- 创建客户端
net包
Go语言标准库文档中文版 | Go语言中文网 | Golang中文社区 | Golang中国
Dial函数("net"):
package main import ("fmt""net" // 网络包 )func main(){//打印:fmt.Println("客户端启动中...")//调用Dial函数:参数:协议、IP、端口号conn,err := net.Dial("tcp","127.0.0.1:8888") //协议、IP、端口号if err != nil{// 连接失败fmt.Println("客户端连接失败:err:",err)return}fmt.Println("连接成功,conn=",conn) }
3、TCP编程 -- 创建服务器端
进行监听:
Listen函数("net"):
package main import ("fmt""net" // 网络包 )func main(){//打印:fmt.Println("服务器端启动中...")//进行监听:需要指定服务器端TCP协议,服务器端的IP + PORTlisten,err := net.Listen("tcp","127.0.0.1:8888") //协议、IP、端口号if err != nil{// 监听失败fmt.Println("监听失败:err:",err)return}//监听成功,等待客户端连接//循环等待客户端连接for {conn,err := listen.Accept() // 等待客户端连接if err!= nil{fmt.Println("客户端连接失败:err:",err)return}fmt.Printf("等待连接成功,conn=%v,接收到的客户端信息: %v \n",conn,conn.RemoteAddr().String())} }
4、TCP编程 -- 连接测试
运行时注意:需要先启动服务器端,然后启动客户端进行访问:
5、TCP编程 -- 发送终端数据
通过客户端发送单行数据,然后退出:
客户端:package main import ("fmt""net" // 网络包"bufio" // 缓冲包"os" // 操作系统包 )func main(){//打印:fmt.Println("客户端启动中...")//调用Dial函数:参数:协议、IP、端口号conn,err := net.Dial("tcp","127.0.0.1:8888") //协议、IP、端口号if err != nil{// 连接失败fmt.Println("客户端连接失败:err:",err)return}fmt.Println("连接成功,conn=",conn)//通过客户端发送单行数据,然后退出:reader := bufio.NewReader(os.Stdin) // 读取用户输入的内容//从终端读取一行用户输入,并准备发送给服务器str, err := reader.ReadString('\n') // 读取用户输入的内容if err!= nil{fmt.Println("readString err:",err)}//发送数据:n,err := conn.Write([]byte(str)) // 发送数据if err!= nil{fmt.Println("conn.Write err:",err)}fmt.Printf("发送了%d字节的数据,并退出\n",n) }
服务器端:
package main import ("fmt""net" // 网络包 )func process(conn net.Conn){defer conn.Close() // 关闭连接for{//创建一个切片,用于存储读取到的客户端发送的数据buf := make([]byte,1024)//从conn连接中读取数据n,err := conn.Read(buf) // 读取数据if err!= nil{fmt.Println("conn.Read err:",err)return}//显示客户端发送的内容到服务器端的终端fmt.Print(string(buf[:n])) // 显示客户端发送的内容到服务器端的终端//向客户端回复okconn.Write([]byte("ok...\n")) // 回复客户端} }func main(){//打印:fmt.Println("服务器端启动中...")//进行监听:需要指定服务器端TCP协议,服务器端的IP + PORTlisten,err := net.Listen("tcp","127.0.0.1:8888") //协议、IP、端口号if err != nil{// 监听失败fmt.Println("监听失败:err:",err)return}//监听成功,等待客户端连接//循环等待客户端连接for {conn,err := listen.Accept() // 等待客户端连接if err!= nil{fmt.Println("客户端连接失败:err:",err)return}else{fmt.Printf("等待连接成功,conn=%v,接收到的客户端信息: %v \n",conn,conn.RemoteAddr().String())}//准备一个协程,协程处理客户端服务请求go process(conn) // 协程处理客户端服务请求,不同的客户端连接,需要不同的协程处理} }
相关文章:

Golang--网络编程
1、概念 网络编程:把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大、功能强的网络系统,从而使众多的计算机可以方便地互相传递信息、共享数据、软件、数据信息等资源。 客户端(Client) 客户端是请求服务…...

区块链技术在数字版权管理中的应用
💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 区块链技术在数字版权管理中的应用 区块链技术在数字版权管理中的应用 区块链技术在数字版权管理中的应用 引言 区块链技术概述 …...

WPS单元格重复值提示设置
选中要检查的所有的单元格 设置提示效果 当出现单元格值重复时,重复的单元格就会自动变化 要修改或删除,点击...

Scala 的包及其导入
Scala使用包来创建用于模块化程序的命名空间。通过在Scala文件的顶部声明一个或多个包名称可以创建包,另一种声明包的方式是使用0,这种方式可以嵌套包,并且提供更好的范围与封装控制。对于包的导入,Scala与Java的区别之一便是&…...

架构师备考-概念背诵(软件工程)
软件工程 软件开发生命周期: 软件定义时期:包括可行性研究和详细需求分析过程,任务是确定软件开发工程必须完成的总目标,具体可分成问题定义、可行性研究、需求分析等。软件开发时期:就是软件的设计与实现,可分成概要设计、详细设计、编码、测试等。软件运行和维护:就是…...
DIP switch是什么?
**DIP开关(DIP switch),也称为指拨开关,是一种可以人工调整的开关,通常以标准双列直插封装(DIP)的形式出现。**DIP开关一般设计在印刷电路板上,配合其他电子元件使用,…...

【销帮帮-注册_登录安全分析报告-试用页面存在安全隐患】
联通支付注册/登录安全分析报告 前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨…...
2024年下半年系统分析师论文
2024年下半年11月份系统分析师考试论文 1、静态测试工具和方法 可以从代码桌前检查,代码审查,代码走查组织文章 2、DevOps开发 可以从开发,运维,测试的自动化协作入手,跨部门沟通需求也算 3、业务流程分析 从BPR…...

【计算机网络】万字详解 UDP 和 TCP
🥰🥰🥰来都来了,不妨点个关注叭! 👉博客主页:欢迎各位大佬!👈 文章目录 1. UDP1.1 UDP 报文格式1.1.1 源端口/目的端口1.1.2 报文长度1.1.3 校验和 2. TCP2.1 TCP 报文结构2.2 TCP 特…...

创建者模式之【建造者模式】
建造者模式 概述 将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。 分离了部件的构造(由Builder来负责)和装配(由Director负责)。 从而可以构造出复杂的对象。这个模式适用于:某个对象的构建过程复杂的情况。由于实现了构建和…...
电商系统中,如何解决部分商品在短时间大量访问的单一热点问题?------Range范围分片
在电商系统中,部分商品在短时间内遭受大量访问的单一热点问题,可能引发服务器压力增大、响应速度变慢、甚至系统崩溃等问题。为了解决这一问题,可以采取以下策略: 一、增加服务器容量和带宽 提升硬件性能:为了应对高…...

利用VMware workstation pro 17安装 Centos7虚拟机以及修改网卡名称
通过百度网盘分享的文件:安装虚拟机必备软件 链接:https://pan.baidu.com/s/1rbYhDh8x1hTzlSNihm49EA?pwdomxy 提取码:omxy 123网盘 https://www.123865.com/s/eXPrVv-UsKch 提取码:eNcy 先自行安装好VMware workstation pro 17 设置虚拟机…...
前端 性能优化 (图片与样式篇)
文章目录 前端能够做哪些图片优化?1、减小图片体积2、图片缓存服务工作线程 (Service Workers)缓存IndexDB缓存图片LocalStorage缓存 3、图片懒加载使用 loading"lazy" 属性 4、不同分辨率下使用不同的图片5、使用webp格式的图片6、配置图片CDN7、减少图片和动图的使…...

A021基于Spring Boot的自习室管理和预约系统设计与实现
🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 赠送计算机毕业设计600…...
量化交易系统开发-实时行情自动化交易-Okex市场深度数据
19年创业做过一年的量化交易但没有成功,作为交易系统的开发人员积累了一些经验,最近想重新研究交易系统,一边整理一边写出来一些思考供大家参考,也希望跟做量化的朋友有更多的交流和合作。 接下来聊聊基于Okex交易所API获取市场深…...

Qt教程(006):QMainWindow主窗口
文章目录 6.1 菜单栏和工具栏6.2 状态栏6.3 铆接部件QMainWindow是一个为用户提供主窗口程序的类,包含一个菜单栏 (menu bar)、多个工具栏 (tools bar)、多个错接部件 (dock widgets)、一个状态栏 (status bar)及一个中心部件 (central widget),是许多应用程序的基础,…...

测试用例的设计
测试用例的概念 什么是测试⽤例? 测试⽤例(Test Case)是为了实施测试⽽向被测试的系统提供的⼀组集合,这组集合包含:测试环境、操作步骤、测试数据、预期结果等要素。 比如我们买回来了一个新电视,要进行测…...
代码随想录训练营Day20 | 93.复原IP地址 - 78.子集 - 90.子集II
93.复原IP地址 题目链接:93.复原IP地址思路: 做法和分割回文字符串那题类似,是对字符串进行切割;本题需要多几个条件,就是每次回溯字符串的长度最多三位,字符串对应的数值必须 在[0, 255]之间,…...

[Meachines] [Medium] MonitorsThree SQLI+Cacti-CMS-RCE+Duplicati权限提升
信息收集 IP AddressOpening Ports10.10.11.30TCP:22,80 $ nmap -p- 10.10.11.30 --min-rate 1000 -sC -sV -Pn PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.10 (Ubuntu Linux; protocol 2.0) | …...

Elasticsearch专栏-4.es基本用法-查询api
es基本用法-查询api 说明查询所有某一字段匹配查询多字段查询bool查询范围查询精确查询正则匹配模糊查询结果处理 说明 es对数据的检索,总结下来就是两部分,即查询和处理。查询指的是查找符合条件的数据,包括查询所有、匹配查询、布尔查询、…...

【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...

【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
日常一水C
多态 言简意赅:就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过,当子类和父类的函数名相同时,会隐藏父类的同名函数转而调用子类的同名函数,如果要调用父类的同名函数,那么就需要对父类进行引用&#…...
前端调试HTTP状态码
1xx(信息类状态码) 这类状态码表示临时响应,需要客户端继续处理请求。 100 Continue 服务器已收到请求的初始部分,客户端应继续发送剩余部分。 2xx(成功类状态码) 表示请求已成功被服务器接收、理解并处…...
跨平台商品数据接口的标准化与规范化发展路径:淘宝京东拼多多的最新实践
在电商行业蓬勃发展的当下,多平台运营已成为众多商家的必然选择。然而,不同电商平台在商品数据接口方面存在差异,导致商家在跨平台运营时面临诸多挑战,如数据对接困难、运营效率低下、用户体验不一致等。跨平台商品数据接口的标准…...

Canal环境搭建并实现和ES数据同步
作者:田超凡 日期:2025年6月7日 Canal安装,启动端口11111、8082: 安装canal-deployer服务端: https://github.com/alibaba/canal/releases/1.1.7/canal.deployer-1.1.7.tar.gz cd /opt/homebrew/etc mkdir canal…...