go学习之网络编程
文章目录
- 网络编程
- 1、网络编程的基本介绍
- 2.网络编程的基础知识
- 1)协议(tcp/ip)
- 2)OSI与TCP/ip参考模型
- 3)ip地址
- 4)端口(port)介绍
- 5)tcp socket编程的客户端和服务器端
 
- 3.socket编程快速入门
- 4.经典项目-海量用户即时通讯系统
- 1)项目开发流程
- 2)需求分析
- 3)界面设计
 
 
 
网络编程
1、网络编程的基本介绍
Golang的主要设计目标之一就是面向大规模后端服务程序,网络通信这块是服务端程序必不可少也是至关重要的一部分
网络编程有两种
1)TCP socket编程,是网络编程的主流。之所以交TCP socket编程,是因为底层是基于Tcp/ip协议的,比如QQ聊天
2)b/s结构的http编程。我们使用浏览器去访问服务器时,使用的就是http协议,而http底层依旧是tcp socke实现的,比如京东商城(这属于go web开发范畴)
2.网络编程的基础知识
1)协议(tcp/ip)
TCP/IP(Transmission Control Protocal)的简写,中文译名为传输控制协议/因特网互联协议,又叫网络通信协议,这个协议是Internet最基本的协议 internet国际互联网的基础,简单的说,就是由网络层的IP协议和传输层的TCP协议组成的
协议的抽象理解图

2)OSI与TCP/ip参考模型

详细结构(模拟qq好友发送数据经过的网络协议层)

3)ip地址
概述:每个internet上的主机和路由器都有一个ip地址,他包括网络和主机号,ip地址有ipv4(32位)和ipv6(128位),可以通过ipconfig来查看
4)端口(port)介绍
我们这里所指的端口不是指物理意义上的端口,而是特指TCP/IP协议上的端口,是逻辑意义上的端口
如果把ip地址比作一个房子,端口就是出入这间房子的门。真正的房子只有几个门,但是一个ip地址的端口可以有65536(256256)个之多!端口是通过端口号来标记的,端口号只有整数,范围是0到65535(256256-1)
端口–分类
- 0是保留端口
- 1-1024是固定端口 又叫有名端口,即被某些程序固定使用,一般程序员不使用, 22:SSH远程登录协议 23:telnet使用 21:Ftp使用 25:smtp服务使用 80:iis使用 7:echo服务
- 1025-65535是动态端口这些端口,程序员是可以使用的(尽量使用40000以上的端口,这样不易冲突,更好地进行监听操作)

端口(port)-使用注意
- 在计算机(尤其是做服务器)要尽可能的少开端口
- 一个端口只能被一个程序监听
- 如果使用netstat -an 可以查看本机有哪些端口在监听
- 可以使用netstat -anb来查看监听端口的pid,在结合任务管理器关闭不安全的端口
5)tcp socket编程的客户端和服务器端
下图为Golang socket编程中客户端和服务器的网络分布

3.socket编程快速入门
项目示意图

1)服务端的处理流程
-1.监听端口
-2.创建客户端的tcp连接,建立客户端和服务端的连接
-3.创建goroutine,处理该连接的请求(通常客户端会通过连接来发送请求包)
server.go
package main
import ("fmt""net" //做网络socket开发时。net包含有我们需要所有的方法和函数// "io"
)func process(conn net.Conn) {//这里我们循环的接收客户端发送的数据defer conn.Close() //关闭connfor {//创建一个新的切片buf := make([]byte,1024)//1.等待客户端通过conn发送信息//2.如果客户端没有write[发送],那么协程就阻塞在这里fmt.Printf("服务器在等待客户端%s 发送信息"+ conn.RemoteAddr().String())n,err :=conn.Read(buf) //从conn读取if err != nil {fmt.Printf("客户端退出 err=%v\n",err)return // !!!}//3.显示客户端发送的内容到服务器的终端fmt.Println(string(buf[:n]))}
}
func main() {fmt.Println("服务器开始监听")//net.Listen("tcp","0.0.0.0:8888")//1.tcp表示使用网络协议是tcp//2.0.0.0.0:8888 表示在本地监听8888端口listen, err :=net.Listen("tcp","0.0.0.0:8888")if err != nil {fmt.Println("listen err")return}defer listen.Close()  //延时关闭listen//循环等待客户端连接我for {//等待客户端连接诶fmt.Println("等待客户端连接...")conn, err := listen.Accept()if err != nil {fmt.Println("Accept() err=",err)}else {fmt.Println("Accept() suc conn=%v 客户端ip为=%v\n",conn,conn.RemoteAddr().String())}//这里准备启动一个协程为客户端服务go process(conn)}// fmt.Printf("Listen successfully=%v\n",listen)
}
2)客户端的处理流程
-1.建立与服务端的链接
-2.发送请求数据,接收服务器端返回的结果数据
-3.关闭连接
3)客户端功能
-1.编写一个客户端程序,能连接到服务端的8888端口
-2.客户端可以发送单行数据,然后就退出
-3.能通过终端输入数据(输入一行发送一行),并发送给服务器端
-4.在终端输入exit表示退出程序
client.go
package main
import ("fmt""net""bufio""os""strings"
)func main() {conn, err :=net.Dial("tcp","192.168.31.102:8888")if err != nil {fmt.Println("client dial err=",err)return}//功能1.客户端可以发送单行数据,然后就退出reader:= bufio.NewReader(os.Stdin) //os.Stdin 代表标准输入【终端】for {//从终端读取一行用户输入,并准备发送给服务器line, err :=reader.ReadString('\n')if err != nil {fmt.Println("readerString 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.Printf("客户端发送了%d字节的数据,并退出",n)}}
运行效果图

4.经典项目-海量用户即时通讯系统
1)项目开发流程
需求分析 -->设计阶段–>编码实现–>测试阶段—>实施
2)需求分析
-1 用户注册
-2 用户登录
-3 显示在线用户列表
-4 群聊(广播)
-5 点对点聊天(私聊)
-6 离线留言
3)界面设计

项目开发前技术准备
项目要保存用户信息和消息数据,因此我们需要学习数据库(Redis和mysql),这里我们选择redis,先学习如何在golang中使用redis
相关文章:
 
go学习之网络编程
文章目录 网络编程1、网络编程的基本介绍2.网络编程的基础知识1)协议(tcp/ip)2)OSI与TCP/ip参考模型3)ip地址4)端口(port)介绍5)tcp socket编程的客户端和服务器端 3.socket编程快速入门4.经典项目-海量用户即时通讯系…...
将数组中的数逆序存放
本题要求编写程序,将给定的n个整数存入数组中,将数组中的这n个数逆序存放,再按顺序输出数组中的元素。 输入格式: 输入在第一行中给出一个正整数n(1≤n≤10)。第二行输入n个整数,用空格分开。 输出格式:…...
 
Unity Web 浏览器-3D WebView中有关于CanvasWebViewPrefab
一、CanvasWebViewPrefab默认设置 这个是在2_CanvasWebViewDemo示例场景文件中可以可以查看得到,可以看出CanvasWebViewPrefab的默认配置如下。 二、Web 浏览器网页和Unity内置UI的渲染顺序 1、如果你勾选了以下这个Native 2D Mode选项的话,那么Unit…...
 
一款计算机顶会爬取解析系统 paper info
一款计算机顶会爬取解析系统 paper info 背景项目实现的功能 技术方案架构设计项目使用的技术选型 使用方法本地项目部署使用ChatGPT等大模型创建一个ChatGPT助手使用阿里云 顶会数据量 百度网盘pfd文件json文件 Q&A github链接 :https://github.com/codebricki…...
 
CommonJs模块化实现原理ES Module模块化原理
CommonJs模块化实现原理 首先看一个案例 初始化项目 npm init npm i webpack -D目录结构如下: webpack.config.js const path require("path"); module.exports {mode: "development",entry: "./src/index.js",output: {path: p…...
 
实验4.1 静态路由的配置
实验4.1 静态路由的配置 一、任务描述二、任务分析三、具体要求四、实验拓扑五、任务实施1.设置交换机和路由器的基本配置。2.使用display ip interface brief命令查看接口配置信息。3.配置静态路由,实现全网互通。 六、任务验收七、任务小结 一、任务描述 某公司刚…...
 
Java网络编程-深入理解BIO、NIO
深入理解BIO与NIO BIO BIO 为 Blocked-IO(阻塞 IO),在 JDK1.4 之前建立网络连接时,只能使用 BIO 使用 BIO 时,服务端会对客户端的每个请求都建立一个线程进行处理,客户端向服务端发送请求后,…...
 
ShenYu网关注册中心之HTTP注册原理
文章目录 1、客户端注册流程1.1、读取配置1.1.1、用于注册的 HttpClientRegisterRepository1.1.2、用于扫描构建 元数据 和 URI 的 SpringMvcClientEventListener 1.2、扫描注解,注册元数据和URI1.2.1、构建URI并写入Disruptor1.2.2、构建元数据并写入Disruptor1.2.…...
 
探索GameFi:区块链与游戏的未来融合
在过去的几年里,区块链技术逐渐渗透到各个领域,为不同行业带来了前所未有的变革。其中,游戏行业成为了一个引人注目的焦点,而这种结合被称为GameFi,即游戏金融。GameFi不仅仅是一个概念,更是一场区块链和游…...
 
Windows下使用CMake编译lua
Lua 是一个功能强大、高效、轻量级、可嵌入的脚本语言。它支持程序编程、面向对象程序设计、函数式编程、数据驱动编程和数据描述。 Lua的官方网站上只提供了源码,需要使用Make进行编译,具体的编译方法为 curl -R -O http://www.lua.org/ftp/lua-5.4.6.…...
 
【C语言(十一)】
C语言内存函数 一、memcpy使用和模拟实现 void * memcpy ( void * destination, const void * source, size_t num ); • 函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。 • 这个函数在遇到 \0 的时候并不会停下来。 • 如果sourc…...
 
系统运行占用过高
1、CPU过高的问题排查 示例代码: public class Test { static class MyThread extends Thread { public void run() { // 死循环,消耗CPU int i 0; while (true) { i; } } } public static void main(String args[]) throws InterruptedException { ne…...
 
HTML---初识CSS
文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 一.CSS概念 CSS是层叠样式表(Cascading Style Sheets)的缩写。它是一种用于描述HTML文档外观样式的标记语言。通过CSS,开发者可以在不改变HTML标记结构的情况…...
 
监控pod 容器外网请求网络带宽,过滤掉内网、基于k8spacket开发、prometheus开发export
首先安装k8spacket 安装k8spacket遇到问题,下载插件一直能不能下载成功,pod不能启动。所有手动下载处理。 helm repo add k8spacket https://k8spacket.github.io/k8spacket-helm-chart helm pull k8spacket/k8spacket打开values.yaml 文件 手动下载插…...
 
windows下docker环境安装
开启硬件虚拟化技术 win10中开启 Hyper-V Win10 下是否开启硬件虚拟化技术,在控制面板,启用 window 功能,找到 Hyper-V 选项,点勾选确认。如图: Windows 11 家庭中文版新增 Hyper-V选项 注意以下的解决方案来自win1…...
 
Python小程序 - 表格数值统计
题设:Excel表格中,计算如下图所示不同颜色(蓝、黄、桔)单元格值:各颜色填涂的单元格值的总和条件: - Excle表格中 - 分色标记,单元格有值 - 开始列(当前为D),…...
 
Unity | Shader基础知识(第一集:unity中最简单的shader)
目录 一、unity的shader 二、创建一个shader(在创建时,选前三种都可以) 三、内容解读 1.shader一直都在 2.我们写shader在写什么 四、没有被干预的shader(最简单的shader) 相关阅读 编写着色器概述 - Unity 手册…...
 
橘子学K8S01之容器中所谓的隔离
我们一直都在说容器就是一个沙盒,沙盒技术顾名思义就是像一个集装箱一样,把应用(服务,进程之类的)装起来的技术,这样每个进程在自己的沙盒中和其他的沙盒隔离开来,每个沙盒之间存在一个边界使得他们互不干扰࿰…...
 
利用svm进行模型训练
一、步骤 1、将文本数据转换为特征向量 : tf-idf 2、使用这些特征向量训练SVM模型 二、代码 from sklearn.model_selection import train_test_split from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.svm import SVC from sklearn.m…...
 
【Docker】WSL 2 上的 Docker 搭建和入门
▒ 目录 ▒ 🛫 导读开发环境 1️⃣ 安装安装Docker Desktop for Windows 2️⃣ 环境配置3️⃣ hello world第一次运行再次运行分析总结 📖 参考资料 🛫 导读 开发环境 版本号描述文章日期2023-12-14操作系统Win11 - 22H222621.2715WSL2 C:…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
 
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
 
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
 
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
 
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
 
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
 
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
 
莫兰迪高级灰总结计划简约商务通用PPT模版
莫兰迪高级灰总结计划简约商务通用PPT模版,莫兰迪调色板清新简约工作汇报PPT模版,莫兰迪时尚风极简设计PPT模版,大学生毕业论文答辩PPT模版,莫兰迪配色总结计划简约商务通用PPT模版,莫兰迪商务汇报PPT模版,…...
