Go语言网络编程介绍以及案例运用

一.Go网络编程概述

1. 基本概念

  • TCP 和 UDP: Go语言支持TCP(传输控制协议)和UDP(用户数据报协议)。TCP提供可靠的、面向连接的通信,而UDP提供无连接的快速数据传输。
  • 并发: Go语言的并发模型是通过goroutines实现的。每个网络请求都可以在自己的goroutine中处理,实现高效的并发。
  • Channels: 用于在goroutines之间安全地传递数据。

2. net包

  • 核心组件: net包提供了网络I/O的基础设施,包括TCP/UDP协议,以及DNS解析。

二.创建TCP服务器

1.监听端口

goCopy codeln, err := net.Listen("tcp", ":8080")
if err != nil {// 处理错误
}

2.接受连接并处理

goCopy codefor {conn, err := ln.Accept()if err != nil {// 处理错误continue}go handleConnection(conn)
}

3.处理连接

goCopy codefunc handleConnection(conn net.Conn) {// 使用conn读取和写入数据conn.Close()
}

三.创建TCP客户端

1.建立连接

goCopy codeconn, err := net.Dial("tcp", "localhost:8080")
if err != nil {// 处理错误
}

2.发送和接收数据

goCopy code// 发送数据
conn.Write([]byte("hello\n"))// 接收数据
bufio.NewReader(conn).ReadString('\n')

3.关闭连接

goCopy code
conn.Close()

4.使用UDP

  1. 建立UDP连接

    goCopy code
    conn, err := net.Dial("udp", "localhost:8081")
    
  2. 发送和接收数据

    goCopy codeconn.Write([]byte("hello"))
    buf := make([]byte, 1024)
    n, _, err := conn.ReadFromUDP(buf)
    

四.综合案例

1.服务端-server.go

package mainimport ("bufio""fmt""net"
)func main() {listener, err := net.Listen("tcp", "localhost:8888")if err != nil {fmt.Println("开启服务端错误:", err)return}defer listener.Close()for {conn, err := listener.Accept()if err != nil {fmt.Println("接收错误:", err)continue // 改为continue,可以处理下一个连接}go handleConnection(conn)}
}func handleConnection(conn net.Conn) {defer conn.Close()// 读取客户端数据message, err := bufio.NewReader(conn).ReadString('\n')if err != nil {fmt.Println("读取错误:", err)return}fmt.Println("Message Received:", message)// 回发数据response := "收到你的消息了:" + messageconn.Write([]byte(response))
}

2.客户端-client.go

package mainimport ("bufio""fmt""net"
)func main() {conn, err := net.Dial("tcp", "localhost:8888")if err != nil {fmt.Println("连接错误:", err)return}defer conn.Close()// 发送数据message := "玩游戏\n"_, err = conn.Write([]byte(message))if err != nil {fmt.Println("发送数据错误:", err)return}fmt.Println("发送数据:", message)// 读取响应response, err := bufio.NewReader(conn).ReadString('\n')if err != nil {fmt.Println("读取响应错误:", err)return}fmt.Println("收到响应:", response)
}

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

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

相关文章

使用WAF防御网络上的隐蔽威胁之目录穿越

目录穿越(Directory Traversal)是一种网络安全攻击手段,也被称为路径穿越。 这种攻击允许攻击者访问存储在Web服务器文件系统上的文件和目录,这些文件和目录原本不应该对用户可见或可访问。 通过利用安全漏洞,攻击者…

路由策略以及双点双向实验

路由控制:控制路由的发布,接收,引入 路由策略--需要用到两种工具:匹配工具 和 策略工具 首先我们来说匹配工具 匹配工具的作用简单来说就是:筛选路由 匹配工具分为两种:ACL 和 前缀列表 ACL: 1.匹配数据(IA允许) 2.匹配路由 acl优点:灵活,比如分奇偶网段等 …

Web开发3:数据库使用

欢迎来到Web开发系列的第三篇!今天我们将探讨如何在Web开发中使用数据库。数据库是存储和管理数据的重要工具,它在现代应用程序中起着至关重要的作用。无论是社交媒体应用、电子商务平台还是博客网站,数据库都是不可或缺的一部分。 什么是数…

【数组】-Lc912-数组排序(冒泡、选择,快排)

写在前面 最近想复习一下数据结构与算法相关的内容,找一些题来做一做。如有更好思路,欢迎指正。 目录 写在前面一、场景描述二、具体步骤1.环境说明2.代码 写在后面 一、场景描述 给定一个长度为 n 的数组,请你编写一个函数,返回该…

C语言——双向链表的实现

双向链表是一种更复杂的链表结构,其中每个节点都有两个链接,一个指向前一个节点,另一个指向下一个节点。这种结构使得在双向链表中遍历数据更为高效,因为可以从两个方向进行遍历。 结构 数据域:存储实际数据。指向前…

数据库(表的基本操作)

目录 1.1 表的基本操作 1.1.1 创建表 1.1.2 表物理存储结构 1.1.3 数据类型 文本类型: 数字类型: 时间/日期类型: 常用的数据类型: 1.1.4 查看表 SHOW 命令 查看表结构: 1.1.5 删除表 查看表结构&#xf…

[网络编程]UDP协议,基于UDP协议的回显服务器

目录 1.UDP协议介绍 2.UDP协议在Java中的类 2.1DatagramSocket类 2.2DatagramPacket 3.回显服务器 3.1Sever端 3.2Client端 1.UDP协议介绍 UDP协议是一种网络协议,它是无连接的,全双工,并且是面向数据报,不可靠的一种协议…

wamp环境的组成

wamp环境介绍 简介 Wamp 就是 Windows Apache Mysql PHP集成安装环境,即在window下的apache、php和mysql的服务器软件。 w--windows Windows操作系统,是由美国微软公司(Microsoft)研发的操作系统,问世于1985年。起初…

【UE Niagara】制作传送门_Part2

在上一篇(【UE Niagara】制作传送门_Part1)基础上继续完成传送门的外层轮廓效果 效果 步骤 1. 打开材质“M_BasicDot_Tans”,添加一个“DepthFade”节点 2. 对材质“M_SubUVMaster_Additive”创建材质实例,这里命名为“M_Portal…

文件传输中的MD5校验技术

1. 文件的MD5校验简介 文件的MD5校验是一种常用的文件完整性验证方法。MD5(Message Digest Algorithm 5)是一种广泛应用的哈希算法,它能够将任意长度的数据转换为固定长度的哈希值。在文件校验中,MD5算法通过计算文件的哈希值&…

第十四届蓝桥杯省赛PythonA/C组------翻转

题目描述: 小蓝用黑白棋的n个棋子排成了一行,他在脑海里想象出了一个长度为n的01串T,他发现如果把黑棋当做1,白棋当做0,这一行棋子也是一个长度为n 的01串S。 小蓝决定,如果在S中发现一个棋子和它两边的棋子…

常见的嵌入式面试问题解答!

1.关键字static的作用是什么?为什么static变量只初始化一次? ​1)修饰局部变量:使得变量变成静态变量,存储在静态区,存储在静态区的数据周期和程序相同, 在main函数开始前初始化,在…

最新版的Tuxera NTFS 2024 支持macOS 12系统

备受期待的Tuxera NTFS 2024 Mac中文版终于上线了,小编第一时间为您带来!Tuxera NTFS 2024 中文版是一款非常好用的NTFS读写工具,可以让您完整的读写兼容NTFS格式驱动器,对磁盘进行访问、编辑、存储和传输文件等。同时还包括开源磁…

C# wpf利用Clip属性实现截屏框

wpf截屏系列 第一章 使用GDI实现截屏 第二章 制作截屏框(本章) ______第一节 使用DockPanel制作截屏框 ______第二节 利用Clip属性实现截屏框(本节) 第三章 实现截屏框热键截屏 第四章 实现截屏框实时截屏 第五章 使用ffmpeg命令行实现录屏 文章目录 wp…

JavaScript基础之JavaScript引入方式

JavaScript引入方式 JavaScript 程序不能独立运行,它需要被嵌入 HTML 中,然后浏览器才能执行 JavaScript 代码。通过 script 标签将 JavaScript 代码引入到 HTML 中,一般以下方式: 外部方式内部方式JavaScript元素事件通过JavaScript伪URL引…

网络数据传输过程

先验知识:OSI模型 OSI网络模型实际上是参考模型,在实际中并不使用,在网络出现问题的时候,可以从一个宏观的整体去分析和解决问题,而且搭建网络的时候并不需要划分为7层,当今互联网广泛使用的是TCP/IP网络模…

js实现一个lazyman

“lazyman”通常被用来形容那些喜欢延迟处理或懒散的人,也就是那种不会立刻采取行动的人。 从设计模式的角度来说,有时也可能会用到“懒汉式”的概念,这通常指的是在需要的时候才进行初始化,比如Java中的单例模式。 此外&#x…

最短代码实现随机打乱数组各个元素的顺序

//最短代码实现随机打乱数组各个元素的顺序 randomSortArr(arr []) {return [...Array(arr.length)].map((v, i) > arr.splice(Math.round(Math.random() * (arr.length - 1)), 1)[0]); },

Unity 建造者模式(实例详解)

文章目录 说明实例1:构建游戏角色实例2:构建游戏场景实例3:构建UI界面 说明 在Unity中,建造者模式(Builder Pattern)是一种创建型设计模式,它通过分离对象构建过程的复杂性,允许您以…

【cucumber】CucumberOptions详解

CucumberOptions注解&#xff1a;相当于Cucumber的初始化配置 Maven依赖包 <!-- 用户验收测试框架 io.cucumber.junit.CucumberOptions --><dependency><groupId>io.cucumber</groupId><artifactId>cucumber-junit</artifactId><vers…