Golang 网络编程socket+tcp+udp

Part 26 - 网络编程

网络编程分类

  • 基于 TCP/IP 的 Socket编程
  • 基于 HTTP 的 HTTP 编程

端口

  • 0是保留端口
  • 1-1024是知名端口
    • 21:ftp
    • 22:ssh
    • 23:telnet
    • 24:smtp
    • 80:http
  • 1025-65535是动态端口

Socket 的使用流程

  • 服务端

    • 监听端口
    • 接收客户端发送的 tcp 连接,建立与客户端的 tcp 连接
    • 创建 goroutine,处理连接请求
    • 关闭连接
  • 客户端

    • 建立与服务端的连接
    • 发送请求
    • 接收服务器端返回的处理数据
    • 关闭连接
  • 示意图

Socket 实例例子

  • server.go

    package mainimport ("fmt""net"
    )func process(conn net.Conn) {defer conn.Close()for {buf := make([]byte,1024)n, err := conn.Read(buf)if err != nil {fmt.Println("服务器的err=",err)return}fmt.Println(string(buf[:n])"客户端发送了")}}func main() {fmt.Println("服务器开始监听")// 1. tcp : 表示使用的协议是tcp// 2. 0.0.0.0:8888 :表示监听的端口是8888listen, err := net.Listen("tcp", "0.0.0.0:8888")if err != nil {fmt.Println("err=", err)return}// 延时关闭资源defer listen.Close()for {// 等待客户端连接conn, err := listen.Accept()if err != nil {fmt.Println("err=", err)return} else {fmt.Printf("连接成功,客户端ip=%v",conn.RemoteAddr().String())}go process(conn)}
    }
    
  • client.go

    package mainimport ("fmt""net"
    )func main() {conn,err := net.Dial("tcp","192.168.20.253:8888")if err != nil {fmt.Println("err=", err)}defer conn.Close()reader := bufio.NewReader(os.Stdin)line, err := reader.ReadString("\n")if err != nil {fmt.Println("err=", err)}n, err := conn.Write([]byte(line))if err != nil {fmt.Println("err=", err)}fmt.Printf("客户端发送了 %d 个字节,并退出", n)
    }
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/42785.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LabVIEW光谱测试系统

在现代光通信系统中,光谱分析是不可或缺的工具。开发了一种基于LabVIEW的高分辨率光谱测试系统,通过对可调谐激光器、可编程光滤波器和数据采集系统的控制,实现了高效、高精度的光谱测量。 项目背景 随着光通信技术的迅速发展,对…

仿哔哩哔哩视频app小程序模板源码

仿哔哩哔哩视频app小程序模板源码 粉色的哔哩哔哩手机视频网页,多媒体视频类微信小程序ui前端模板下载。包含:视频主页和播放详情页。 仿哔哩哔哩视频app小程序模板源码

thinkphp6/8 验证码

html和后台验证代码按官方来操作 ThinkPHP官方手册 注意: 如果验证一直失败,看看Session是否开启, 打印dump(session_status());结果2为正确的, PHP_SESSION_DISABLED: Session功能被禁用(返回值为0)。…

数据库导入

【一】存储数据的演变过程 1.本地对象内存存储--》字典列表之类的存在我们所写的模块那里 2.txt文件---》要对数据进行转变格式以及拼接才能存储 3.json文件---》升级了一点,不用像txt那样 4.数据库应用--》解决了存放位置和数据格式问题 【二】数据库本质 "…

科普文:一文搞懂jvm实战(四)深入理解逃逸分析Escape Analysis

概叙 Java 中的对象是否都分配在堆内存中? 好了太抽象了,那具体一点,看看下面这个对象是在哪里分配内存? public void test() { Object object new Object(); }这个方法中的object对象,是在堆中分配内存么&#xff1…

【C语言】C语言编译链接和Win32API简单介绍

目录 翻译环境和运行环境翻译环境编译器预处理(预编译)编译链接 执行环境 Win32API是什么控制台程序控制台获取坐标COORDGetStdHandle函数GetConsoleCursorinfo函数CONSOLE_CURSOR_INFOSetConsoleCursorInfo函数SetConsoleCursorPostion函数GetAsyncKeyS…

Qt(MSVC)下报“语法错误缺少“}““语法错误缺少“常数“ 的解决办法

1.现象 目前我在工程中试图使用QHttpServer时,一编译,就报了一堆奇奇怪怪的错误: D:\Qt\httpServer\Qt5.15.2\include\QtHttpServer\qhttpserverrequest.h:75: error: C2143: 语法错误: 缺少“}”(在“(”的前面) D:\Qt\httpServer\Qt5.15.…

栈和队列---循环队列

1.循环队列的出现 (1)上面的这个就是一个普通的数据的入队和出队的过程我们正常情况下去实现这个入队和出队的过程,就是这个数据从这个队尾进入,从队头离开,但是这个加入的时候肯定是没有其他的问题的,直接…

人工智能笔记分享

文章目录 人工智能图灵测试分类分类与聚类的区别(重点)分类 (Classification)聚类 (Clustering) 特征提取 分类器(重点)特征提取为什么要进行特征提取?(重点)分类器 训练集、测试集大小&#x…

【分布式技术】——监控平台zabbix 介绍与部署

一、监控系统的相关知识 1.监控系统运用的原因 当我们需要实时关注与其相关的各项指标是否正常,往往存在着很多的服务器、网络设备等硬件资源,如果我们想要能够更加方便的、集中的监控他们,zabix可以实现集中监控管理的应用程序 监控的初衷…

Spring SimpleAsyncTaskExecutor学习

一. 简介 SimpleAsyncTaskExecutor,不是真的线程池,这个类不重用线程,每次调用都会创建一个新的线程,没有最大线程数设置;并发大的时候会产生严重的性能问题;在 Java 中创建线程并不便宜,线程对…

C#——封装详情

C# 封装 封装是面向对象编程中的一个核心概念,它使得对象的状态(即数据)不会被直接访问,而是通过方法(即行为)来控制和操作。封装可以提高代码的内聚性和可维护性,同时也提供了一种保护数据不被…

ARM汇编与机器码、汇编指令

文章目录 1. CISC与RISC指令集 2. ARM汇编指令 3. 汇编与机器码 4. 汇编指令格式 5. MOV指令 6. BL指令 7. B指令 8. ADD/SUB指令 9. LDR/STR指令 1. CISC与RISC指令集 根据指令的复杂度,所有CPU可以分为两类: CISC(Complex Instr…

C#——多态详情

多态 多态: 是同一个行为,具有多个不同表现形式或形态的能力 多态分为两种 : 静态性多态: 函数重载,符号重载动态性多态: 虚方法,抽象类,接口 静态多态 在编译时,函数和对象的连接机制被称为早期绑定,…

知识图谱的符号表示

1、基于图的表示建模 2、有效标记图 3、属性图表示方法的优点和去点 4、RDF是什么?表达是有限的 5、OWL,本体语言 6、OWL有很多家族 7、属性图、RDF\三元组、关系图 ---------------------------PPT---------------------

三级_网络技术_07_IP地址规划技术

1.IP地址192.168.15.1/27的子网掩码可写为()。 255.255.255.192 255.255.255.224 255.255.255.240 255.255.255.248 2.IP地址块211.64.0.0/11的子网掩码可写为()。 255.192.0.0 255.224.0.0 255.240.0.0 255.248.0.0 3.IP地址块59.67.159.125/11的子网掩码可写为()。…

STM32与W25Q64 Flash:SPI通信协议的高效实现策略

摘要 在嵌入式系统中,SPI通信协议是实现微控制器与非易失性存储设备如W25Q64 Flash存储器之间数据交换的关键技术。本文将探讨STM32微控制器与W25Q64 Flash存储器通过SPI进行通信的高效实现策略,包括硬件配置、SPI接口编程、性能优化技巧以及实际代码示…

已解决 javax.xml.transform.TransformerFactoryConfigurationError 异常的正确解决方法,亲测有效!!!

已解决 javax.xml.transform.TransformerFactoryConfigurationError 异常的正确解决方法,亲测有效!!! 目录 一、问题分析 二、报错原因 三、解决思路 四、解决方法 五、总结 博主v:XiaoMing_Java 博主v&#x…

【微服务网关——服务发现】

1.服务发现 1.1 介绍 服务发现是指用注册中心来记录服务信息,以便其他服务快速查找已注册服务服务发现分类: 客户端服务发现服务端服务发现 1.2 客户端服务发现 客户端服务发现(Client-side Service Discovery)是一种微服务架构中的模式…

Vine: 一种全新定义 Vue 函数式组件的解决方案

7月6日的 vue confg 大会上 ShenQingchuan 大佬介绍了他的 Vue Vine 项目, 一种全新定义 Vue 函数式组件的解决方案。 和 React 的函数式组件有异曲同工之妙,写起来直接起飞了。 让我们来快速体验一下 vine, 看看到底给我们带来了哪些惊喜吧…