C++GO语言socket套接字
目录
01 06-socket-client-server通信过程分析
02 07-socket-server-单次处理
03 08-socket-client
01 09-socket-server-多连接建立
02 10-socket-client多次发送数据
01 -socket-client-server通信过程分析
### - Server Demo接收一个链接,而且只能发送一次数据```go package mainimport ("fmt""net""strings" )func main() {//创建监听ip := "127.0.0.1"port := 8848address := fmt.Sprintf("%s:%d", ip, port)//func Listen(network, address string) (Listener, error) {//net.Listen("tcp", ":8848") //简写,冒号前面默认是本机: 127.0.0.1listener, err := net.Listen("tcp", address)if err != nil {fmt.Println("net.Listen err:", err)return}fmt.Println("监听中...")//Accept() (Conn, error)conn, err := listener.Accept()if err != nil {fmt.Println("listener.Accept err:", err)return}fmt.Println("连接建立成功!")//创建一个容器,用于接收读取到的数据buf := make([]byte, 1024) //使用make来创建字节切片, byte ==> uint8//Read(b []byte) (n int, err error)//cnt:真正读取client发来的数据的长度cnt, err := conn.Read(buf)if err != nil {fmt.Println("conn.Read err:", err)return}fmt.Println("Client =====> Server, 长度:", cnt, ",数据:", string(buf[0:cnt]))//服务器对客户端请求进行响应 ,将数据转成大写 "hello" ==> HELLO//func ToUpper(s string) string {upperData := strings.ToUpper(string(buf[0:cnt]))//Write(b []byte) (n int, err error)cnt, err = conn.Write([]byte(upperData))fmt.Println("Client <====== Server, 长度:", cnt, ",数据:", upperData)//关闭连接conn.Close() }```
02 -socket-server-单次处理
### - client demo```go package mainimport ("fmt""net" )func main() {conn, err := net.Dial("tcp", ":8848")if err != nil {fmt.Println("net.Dial err:", err)return}fmt.Println("cliet与server连接建立成功!")sendData := []byte("helloworld")//向服务器发送数据cnt, err := conn.Write(sendData)if err != nil {fmt.Println("conn.Write err:", err)return}fmt.Println("Client ===> Server cnt:", cnt, ", data:", string(sendData))//接收服务器返回的数据//创建buf,用于接收服务器返回的数据buf := make([]byte, 1024)cnt, err = conn.Read(buf)if err != nil {fmt.Println("conn.Read err:", err)return}fmt.Println("Client <==== Server , cnt:", cnt, ", data:", string(buf[0:cnt]))conn.Close() }```socket-server处理多个连接,每个连接可以接收多次数据
03 -socket-client
socket-server处理多个连接,每个连接可以接收多次数据```go package mainimport ("fmt""net""strings" )func main() {//创建监听ip := "127.0.0.1"port := 8848address := fmt.Sprintf("%s:%d", ip, port)//func Listen(network, address string) (Listener, error) {//net.Listen("tcp", ":8848") //简写,冒号前面默认是本机: 127.0.0.1listener, err := net.Listen("tcp", address)if err != nil {fmt.Println("net.Listen err:", err)return}//需求:// server可以接收多个连接, ====> 主go程负责监听,子go程负责数据处理// 每个连接可以接收处理多轮数据请求for {fmt.Println("监听中...")//Accept() (Conn, error)conn, err := listener.Accept()if err != nil {fmt.Println("listener.Accept err:", err)return}fmt.Println("连接建立成功!")go handleFunc(conn)} }//处理具体业务的逻辑,需要将conn传递进来,每一新连接,conn是不同的 func handleFunc(conn net.Conn) {for { //这个for循环,保证每一个连接可以多次接收处理客户端请求//创建一个容器,用于接收读取到的数据buf := make([]byte, 1024) //使用make来创建字节切片, byte ==> uint8fmt.Println("准备读取客户端发送的数据....")//Read(b []byte) (n int, err error)//cnt:真正读取client发来的数据的长度cnt, err := conn.Read(buf)if err != nil {fmt.Println("conn.Read err:", err)return}fmt.Println("Client =====> Server, 长度:", cnt, ",数据:", string(buf[0:cnt]))//服务器对客户端请求进行响应 ,将数据转成大写 "hello" ==> HELLO//func ToUpper(s string) string {upperData := strings.ToUpper(string(buf[0:cnt]))//Write(b []byte) (n int, err error)cnt, err = conn.Write([]byte(upperData))fmt.Println("Client <====== Server, 长度:", cnt, ",数据:", upperData)}//关闭连接_ = conn.Close() }```
04 -socket-server-多连接建立
当client多次发送数据时:# 三、http## 1. 概述编写web语言:1. java 2. php, 现在都在尝试使用go语言重写 3. python,豆瓣 4. go语言 ===》 beego,gin两个主流的web框架https协议:我们使用浏览器访问的时候发送的就是http请求1. http是应用层的协议,底层还是依赖传输层:tcp(短连接),网络层(ip)2. 无状态的,每一次请求都是独立的,下次请求需要重新建立连接3. https:1. http是标准协议 ==》 明文传输,不安全2. https不是标准协议 ===》 https = http + ssl(非对称加密,数字证书)--》加密的3. 现在所有网站都会尽量要求使用https开发:安全## 2. http请求报文格式/day03-socket-http/assets/1575433140952.png)
05 -socket-client多次发送数据
一个http请求可以分为4部分:1. 请求行:包含三部分1. 格式: 方法 + URL + 协议版本号2. 实例: POST + /chapter17/user + HTTP/1.13. 请求方法:1. GET:获取数据2. POST:上传数据(表单格式,json格式)3. PUT:修改数据4. DELETE: 用于删除数据 2. 请求头1. 格式: key :value2. 可以有很多个键值对(包含协议自带,也包含用户自定义的)3. 常见重要头:1. Accept : 接收数据的格式2. User-Agent : 描述用户浏览器的信息3. Connection: Keep-Alive (长链接), Close(短连接)4. Aceept-Encoding : gzip, xxx , 描述可以接受的编码5. Cookie: 由服务器设置的key=value数据,客户端下次请求的时候可以携带过来6. Content-Type: 1. appliction/-form(表示上传的数据是表单格式), 2. application/json(表示body的数据是json格式)7. 用户可以自定义的:1. name : Duke2. age : 18 3. 空行1. 告诉服务器,请求头结束了,用于分割 4. 请求包体(可选的)1. 一般在POST方法时,会配套提供BODY2. 在GET的时候也可以提供BODY,但是这样容易让人混淆,建议不要这样使用3. 上传两种数据格式:1. 表单: 姓名,性别,年龄2. json数据格式启动tcp的server案例,使用postman发起http请求,查看http请求头信息:```go package mainimport ("fmt""net""strings" )func main() {//创建监听ip := "127.0.0.1"port := 8848address := fmt.Sprintf("%s:%d", ip, port)//func Listen(network, address string) (Listener, error) {//net.Listen("tcp", ":8848") //简写,冒号前面默认是本机: 127.0.0.1listener, err := net.Listen("tcp", address)if err != nil {fmt.Println("net.Listen err:", err)return}fmt.Println("server start ...")//需求:// server可以接收多个连接, ====> 主go程负责监听,子go程负责数据处理// 每个连接可以接收处理多轮数据请求for {fmt.Println("监听中...")//Accept() (Conn, error)conn, err := listener.Accept()if err != nil {fmt.Println("listener.Accept err:", err)return}fmt.Println("连接建立成功!")go handleFunc(conn)} }
相关文章:

C++GO语言socket套接字
目录 01 06-socket-client-server通信过程分析 02 07-socket-server-单次处理 03 08-socket-client 01 09-socket-server-多连接建立 02 10-socket-client多次发送数据 01 -socket-client-server通信过程分析 ### - Server Demo接收一个链接,而且只能发送一次数…...

WebSocket:实时通信的新时代
在现代Web应用中,实时通信变得越来越重要。传统的HTTP协议虽然能够满足基本的请求-响应模式,但在需要频繁更新数据的场景下,其效率和性能显得捉襟见肘。WebSocket协议应运而生,它提供了一种在单个TCP连接上进行全双工通信的机制&a…...
(四)YOLO_World-SAM-GraspNet的mujoco抓取仿真(操作记录)
一、创建虚拟环境 这里直接克隆之前项目的环境 (二)Graspnet在mujoco的仿真复现(操作记录)_graspnet仿真-CSDN博客 conda create -n graspnet --clone mujoco_graspnet conda activate graspnet 二、安装额外的环境包 pip in…...

IT/OT 融合架构下的工业控制系统安全攻防实战研究
1. 引言 随着工业 4.0 和智能制造的浪潮席卷全球,信息技术 (IT) 与运营技术 (OT) 的融合已成为不可逆转的趋势。这种融合旨在通过实时数据交换和分析,打破传统的信息孤岛,显著提升生产效率、优化决策、降低运营成本并增强市场竞争力。IT 系统…...

基于Qt的app开发第六天
写在前面 博主是一个大一下的计科生,现在正在做C面向对象程序设计的课程设计,具体功能可以看本专栏的第一篇博客。 目前的进度是:配好MySQL驱动->设计完界面->实现各个界面的切换 这一篇博主要初步实现待办板块的功能,即新建…...

npm create vite@latest my-vue-app 解读
背景发荧光的样式。 filter属性的学习:filter - CSS:层叠样式表 | MDN 复习一下em 组件的调用: 是msg让“ViteVue”显示出来的!! a标签的targte属性: 组件之间怎么传值的: ,没看懂code标签怎么…...

【SpringCloud GateWay】Connection prematurely closed BEFORE response 报错分析与解决方案
一、背景 今天业务方调用我们的网关服务报错: Connection prematurely closed BEFORE response二、原因分析 三、解决方案 第一步: 增加 SCG 服务的JVM启动参数,调整连接获取策略。 将连接池获取策略由默认的 FIFO(先进先出)变更为 LIFO(…...
ABP vNext 集成高性能、高可靠 MQTT 服务器实战
🚀 ABP vNext 集成高性能、高可靠 MQTT 服务器实战 🔧 本文将从实战出发,带你一步步在 ABP vNext 框架中集成 MQTT 服务,构建一个高性能、高可靠的物联网通信平台。适合 IoT 系统、智能硬件平台和实时监控场景。 🛠️ …...

PD快充诱骗协议芯片XSP04D与主板共用一个Type-C和电脑传输数据
随着智能电子产品的广泛应用,快充方案越来越受到重视,且迭代次数也更加频繁。在一些使用频率较高、耗电较大的电子产品中,快充方案也成为了大多数人的追求,它能很大程度上缩短充电的时间,例如XSP04D这款快充诱骗协议方…...

goland无法debug
goland无法使用debug,修复_goland无法debug-CSDN博客...

ECLIC中断流程及实际应用 —— RISC-V中断机制(二)
在长期的嵌入式开发实践中,对中断机制的理解始终停留在表面层次,特别当开发者长期局限于纯软件抽象层面时,对中断机制的理解极易陷入"知其然而不知其所以然"的困境,这种认知的局限更为明显;随着工作需要不断…...

【网络分析工具】网络工具wireshark、TCPdump、iperf使用详解
这里写目录标题 1. wireshark1.1. 过滤包1.2. 常见分析 2. tcpdump3. iperf 1. wireshark **ip.dst eq 10.0.0.21** 是用于网络流量分析工具(例如 Wireshark 或 tcpdump)的过滤器表达式。 它的作用是筛选出所有目标IP地址为 10.0.0.21 的数据包 IP.add…...

debian中笔记本的省电选择auto-cpufreq
在reddit中,看评论区出现这个软件,于是打算尝试一下,应该能对不使用电源时笔记本的省电起到一定的作用。 https://github.com/AdnanHodzic/auto-cpufreq?tabreadme-ov-file#why-do-i-need-auto-cpufreq 作用 One of the problems with Linux…...

力扣热题100之环形链表 II
题目 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使…...

【记录】HunyuanVideo 文生视频工作流
HunyuanVideo 文生视频工作流指南 概述 本指南详细介绍如何在ComfyUI中使用腾讯混元HunyuanVideo模型进行文本到视频生成的全流程操作,包含环境配置、模型安装和工作流使用说明。 参考:https://comfyui-wiki.com/zh/install/install-comfyui/install-c…...

SpringCloud之Ribbon基础认识-服务负载均衡
0、Ribbon基本认识 Spring Cloud Ribbon 是基于 Netflix Ribbon 实现的一套客户端 负载均衡的工具。 Ribbon 主要功能是提供客户端负载均衡算法和服务调用 Ribbon 客户端组件提供一系列完善的配置项如连接超时,重试等。 Ribbon 会基于某种规则(如简单…...
[Java实战]Spring Boot 静态资源配置(十三)
[Java实战]Spring Boot 静态资源配置(十三) 引言 静态资源(如 HTML、CSS、JavaScript、图片等)是 Web 应用的基石。Spring Boot 通过自动化配置简化了静态资源管理,但面对复杂场景(如多模块项目、CDN 集成…...

重生之我在2024学Fine-tuning
一、Fine-tuning(微调)概述 Fine-tuning(微调)是机器学习和深度学习中的一个重要概念,特别是在预训练模型的应用上。它指的是在模型已经通过大量数据训练得到一个通用的预训练模型后,再针对特定的任务或数据…...

Selenium Web自动化测试学习笔记(一)
自动化测试 技术手段模拟人工,执行重复性任务,准确率100%,高于人工 selenium 可通过浏览器驱动控制浏览器,通过元素定位模拟人工,实现web自动化,没有焦点(把浏览器放在最小化依然可以&#x…...

2025年5月15日前 免费考试了! Oracle AI 矢量搜索专业认证
2025年5月5日前 免费考试了! Oracle AI 矢量搜索专业认证 立刻预约吧 文章目录 2025年5月5日前 免费考试了! Oracle AI 矢量搜索专业认证立刻预约吧🔍 探索 AI 向量搜索的强大功能!🎯 学习路径目标Ὦ…...
服务器不备案有影响吗
在当今数字化的时代,服务器成为了众多企业和个人开展业务、展示自我的重要工具。然而,有一个问题常常被忽视,那就是服务器不备案到底有没有影响? 答案是肯定的!服务器不备案,影响可不小。据相关数据显示&a…...

EasyRTC嵌入式音视频通话SDK驱动智能硬件音视频应用新发展
一、引言 在数字化浪潮下,智能硬件蓬勃发展,从智能家居到工业物联网,深刻改变人们的生活与工作。音视频通讯作为智能硬件交互与协同的核心,重要性不言而喻。但嵌入式设备硬件资源受限,传统音视频方案集成困难。EasyRT…...
力扣-21.合并两个有序链表
题目描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 class Solution { public:ListNode *mergeTwoLists(ListNode *list1, ListNode *list2) {ListNode *l new ListNode(-1);ListNode *p l;while (list1 &&…...
多线服务器具有什么优势
在当今数字化飞速发展的时代,多线服务器宛如一位低调的幕后英雄,默默为我们的网络世界提供着强大的支持。那么,多线服务器到底具有哪些令人瞩目的优势呢 首先,多线服务器的最大优势之一就是网络访问的高速与稳定。想象一下&#x…...
ESP32 PWM音频应用及场景说明
ESP32芯片的PWM(脉冲宽度调制)功能在音频应用中具有广泛用途,尤其是在低成本、低功耗的场景中。以下是具体的应用举例和应用场景说明: 一、ESP32 PWM音频应用举例 1. 简单音频播放 实现方式:通过PWM生成模拟音频信号&…...
C++.变量与数据类型
C++变量与数据类型 1. C++变量与数据类型1.1 基本数据类型1.2 复合数据类型2.1 定义方式2.2 常量类型3.1 数据类型修饰符3.2 存储类修饰符3.3 类访问修饰符4.1 算术运算符4.2 关系运算符4.3 逻辑运算符4.4 赋值运算符4.5 条件运算符4.6 位运算符5. 总结5.1 变量与数据类型5.2 常…...
Compose笔记(二十二)--NavController
这一节主要了解一下Compose中的NavController,它是实现导航功能的核心组件,提供了强大而灵活的页面管理能力,用于管理导航图中的目的地和执行导航操作。 API navigate(route: String) 含义:导航到指定路由的目的地。 作用&#x…...
SQL:SELF JOIN(自连接)与CROSS JOIN(交叉连接)
目录 SELF JOIN(自连接) CROSS JOIN(交叉连接 / 笛卡尔积) 示例: SELF JOIN CROSS JOIN 如果没有 DATEDIFF() 函数怎么办? 🔍 SELF JOIN vs CROSS JOIN 对比总结 SELF JOIN(自…...
互联网大厂Java求职面试:基于RAG的智能问答系统设计与实现-1
互联网大厂Java求职面试:基于RAG的智能问答系统设计与实现-1 场景背景 在某互联网大厂的技术面试中,技术总监张总正在面试一位名为郑薪苦的求职者。郑薪苦虽然对技术充满热情,但回答问题时总是带着幽默感,有时甚至让人哭笑不得。…...

Ubuntu 22.04.5 LTS 基于 kubesphere 安装 cube studio
Ubuntu 22.04.5 LTS 基于 kubesphere 安装 cube studio 前置条件 已经成功安装 kubesphere v4.3.1 参考教程: https://github.com/data-infra/cube-studio/wiki/%E5%9C%A8-kubesphere-%E4%B8%8A%E6%90%AD%E5%BB%BA-cube-studio 1. 安装基础依赖 # ubuntu安装基础依赖 apt insta…...