Go-Web之TCP网络连接

news2024/11/28 7:24:47

函数学习

  1. net.Listen:用于创建一个TCP监听器,在指定地址上监听传入的连接
  2. listrener.Accept:这个方法会阻塞,直到有新的客户端连接,当连接到来时,它会返回一个net.Conn类型的连接对象,表示客户端和服务器之间的TCP连接
  3. net.Dial:用于客户端连接到TCP服务器,指定服务器的地址,比如127.0.0.1:8080,其返回一个net.Conn类型的对象,表示客户端与服务器之间的连接
  4. conn.Write:用于向客户端或服务器发送数据。
  5. conn.Read:用于从连接中读取来自客户端的消息,客户端读取来自服务器的响应

如何构建TCP服务器

在Go语言中构建TCP服务器主要通过net库

总共是三个步骤:

  1. 使用net.Listen创建一个TCP监听器,它会指定的端口上监听传入的连接
  2. 通过listener.Accept()传入的连接
  3. 通过conn与客户端通信
package main  
  
import (  
    "fmt"  
    "net"    "os")  
  
func handleConnection(conn net.Conn) {  
    defer conn.Close()  
  
    conn.Write([]byte("Welcome to the TCP server!\n"))  
  
    buf := make([]byte, 1024)  
    n, err := conn.Read(buf)  
    if err != nil {  
       fmt.Println("Error", err)  
       return  
    }  
    fmt.Println("Received from client", string(buf[:n]))  
}  
  
func main() {  
    listener, err := net.Listen("tcp", ":8080")  
    if err != nil {  
       fmt.Println("Error:", err)  
       os.Exit(1)  
    }  
    defer listener.Close()  
  
    fmt.Println("Server is listening on port 8080...")  
  
    for {  
       conn, err := listener.Accept()  
       if err != nil {  
          fmt.Println("Error accepting:", err)  
          continue  
       }  
       go handleConnection(conn)  
    }  
}

这段代码主要就是提供一个网络服务,在本机的8080端口创建一个tcp服务器,连接到就会向客户端发送消息

如何构建TCP客户端

步骤主要是俩个:

  1. 使用net.Dial连接到指定的TCP服务器地址
  2. 通过conn发送和接收数据
package main  
  
import (  
    "fmt"  
    "net"    "os")  
  
func main() {  
    conn, err := net.Dial("tcp","127.0.0.1:8080")  
    if err!=nil {  
       fmt.Println("Error",err)  
       os.Exit(1)  
    }  
    defer conn.Close()  
    _,err=conn.Write([]byte("Hello from TCP client!"))  
    if err!=nil {  
       fmt.Println("Error",err)  
       return  
    }  
    buf :=make([]byte,1024)  
    n,err :=conn.Read(buf)  
    if err!=nil {  
       fmt.Println("Error",err)  
       return  
    }  
    fmt.Println(n)  
}

这段代码主要是向127.0.0.1:8080发送了一个Hello的语句,并接收其返回的语句进行输出。

这个代码可以和上一个相连接。

在两个控制台分别启动代码即可

go run 1.go

go run 2.go

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

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

相关文章

海康VsionMaster学习笔记(学习工具+思路)

一、前言 VisionMaster算法平台集成机器视觉多种算法组件,适用多种应用场景,可快速组合算法,实现对工件或被测物的查找测量与缺陷检测等。VM算法平台依托海康威视在图像领域多年的技术积淀,自带强大的视觉分析工具库,可…

XML JSON

XML 与 JSON 结构 XML(eXtensible Markup Language) 1. 定义 XML 是一种标记语言,用于描述数据的结构和内容。主要用于数据存储与交换。 2. 特点 可扩展性:用户可以自定义标签。层次化结构:数据以树形结构组织&…

[VSCode] vscode下载安装及安装中文插件详解(附下载文件)

前言 vscode 链接:https://pan.quark.cn/s/3acbb8aed758 提取码:dSyt VSCode 是一款由微软开发且跨平台的免费源代码编辑器;该软件支持语法高亮、代码自动补全、代码重构、查看定义功能,并且内置了命令行工具和Git版本控制系统。 …

wireshark基础

免责声明: 笔记的只是方便各位师傅学习知识,以下代码、网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负。 泷羽sec官网:https://longyusec.com/ 泷羽sec B站地址:https:/…

李宏毅LLM探索(1)

1引入 1.1 提问:请列出你能做的事情,至少三十项,每一项都简单扼要:然后把你能做的事情制成文字云 文心一言生成: 以下是我能做的至少三十项事情,每一项都简单扼要地列出:回答问题 提供信息 生成文本 理解…

磁盘文件系统问题排查

1. ext4磁盘结构 块组:超级块:块位图:inode位图:inode表:空闲inode表:空闲块表:2. 块组结构 Group 0: (Blocks 0-32767) csum 0xfd42 [ITABLE_ZEROED]Primary superblock at 0, Group descript…

百度雪花算法id默认配置过期注意更新配置

百度雪花id项目地址&#xff1a;GitHub - baidu/uid-generator: UniqueID generator 默认配置根据redme看容易看迷糊&#xff0c;图和配置它压根就不是对应的 默认的配置如下 <!-- Specified bits & epoch as your demand. No specified the default value will be us…

(11)(2.2) BLHeli32 and BLHeli_S ESCs(二)

文章目录 前言 1 传递支持 前言 BLHeli 固件和配置应用程序的开发是为了允许配置 ESC 并提供额外功能。带有此固件的 ESC 允许配置定时、电机方向、LED、电机驱动频率等。在尝试使用 BLHeli 之前&#xff0c;请按照 DShot 设置说明进行操作(DShot setup instructions)。 1 传…

【初阶数据结构和算法】初识树与二叉树的概念以及堆和完全二叉树之间的关系

文章目录 一、树的概念与结构1.树的概念2.树的相关术语3.树的表示4.树形结构实际运用举例 二、二叉树的概念及特殊二叉树1.二叉树的概念2.特殊的二叉树满二叉树完全二叉树二叉树的性质(由满二叉树特点推导) 三、二叉树的存储结构1.二叉树的顺序结构2.二叉树的链式结构 四、堆和…

如何在Canvas中添加背景图片、图片元素和文字元素

Canvas是HTML5中一个强大的元素&#xff0c;它允许我们在网页上进行图形绘制。在本文中&#xff0c;我们将学习如何在Canvas中添加背景图片、图片元素以及文字元素。 创建Canvas元素 首先&#xff0c;我们需要在HTML文档中创建一个<canvas>元素。以下是创建一个500x500像…

单点登录深入详解之设计方案总结

基于cookie的单点登录解决方案 概述 用户登录之后 , 将认证信息存储至 Cookie &#xff0c;当再次访问本服务或者访问其他应用服务时&#xff0c;直接从 Cookie 中传递认证信息&#xff0c;进行鉴权处理。 问题 1. 如何保障Cookie内用户认证信息的安全性? 第一, Cookie…

深入探讨 Redis 持久化机制:原理、配置与优化策略

文章目录 一、引言二、Redis持久化概述三、RDB&#xff08;Redis DataBase&#xff09;持久化1、RDB概念与工作原理2、RDB的配置选项3、RDB优化配置项4、RDB的优势与劣势 三、AOF&#xff08;Append-Only File&#xff09;持久化1、AOF概念与工作原理2、AOF的三种写回策略3、Re…

Java图书管理系统(简易保姆级)

前面学习了这么多知识&#xff0c;为了巩固之前的知识&#xff0c;我们就要写一个图书管理系统来帮助大家复习&#xff0c;让大家的知识融会贯通~~~ 话不多说&#xff0c;直接开始今天的内容~ 首先呢&#xff0c;我们要有一个大体的思路&#xff1a; 实现效果思路有两种情况&a…

网络安全在现代企业中的重要作用

网络安全是这个数字时代最令人担忧的事情之一。对技术的依赖性越来越强&#xff0c;使其同时面临多种网络威胁。其声誉和法律后果的大幅下降可能归因于一次妥协。 这使得良好的网络安全成为所有企业的选择和必需品。本文介绍了网络安全的重要性、企业中常见的网络威胁以及公司…

Zero to JupyterHub with Kubernetes中篇 - Kubernetes 常规使用记录

前言&#xff1a;纯个人记录使用。 搭建 Zero to JupyterHub with Kubernetes 上篇 - Kubernetes 离线二进制部署。搭建 Zero to JupyterHub with Kubernetes 中篇 - Kubernetes 常规使用记录。搭建 Zero to JupyterHub with Kubernetes 下篇 - Jupyterhub on k8s。 参考&…

三维天地助力生产制造企业做好产品质量控制

生产制造业已成为全球经济的重要支柱,随着全球化的深入发展,生产制造业的竞争愈发激烈。在生产过程中难以避免的质量波动可能导致产品不良率上升,影响客户满意度和企业声誉。为确保产品质量是受控且优质的,确保生产过程的稳定性,大多数生产制造企业都在进行精细化管理改革,依靠…

IC数字后端实现之大厂IC笔试真题(经典时序计算和时序分析题)

今天小编给大家分享下每年IC秋招春招必考题目——静态时序分析时序分析题。 数字IC后端笔试面试题库 | 经典时序Timing计算题 时序分析题1&#xff1a; 给定如下图所示的timing report&#xff0c;请回答一下几个问题。 1&#xff09;这是一条setup还是hold的timing report?…

arcgis for js FeatureLayer和GeoJSON一个矢量点同时渲染图形和文本

效果 FeatureLayer和GeoJSONLayer, 一个矢量点同时渲染图形和文本 代码 相关参数自行查阅文档, 这里就不做注释了 示例代码手动创建FeatureLayer方式, 如果是通过远程url加载图层的 渲染方式同理, GeoJSONLayer同理 <!DOCTYPE html> <html lang"zn"><…

单片机将图片数组调出来显示MPU8_8bpp_Memory_Write

界面显示图片是很常见的需求&#xff0c;使用外挂的FLASH是最常用的方法。但是如果图片需求不大&#xff0c;比如说我们只要显示一个小图标&#xff0c;那么为了节省硬件成本&#xff0c;是不需要外挂一颗FLASH芯片的&#xff0c;我们可以将图标转成数组&#xff0c;存在单片机…

Linux八股积累与笔记

1、iptables 是一个用于配置Linux内核防火墙规则的工具。四表五链&#xff1a;在iptables中&#xff0c;有四个表&#xff08;tables&#xff09;和五个链&#xff08;chains&#xff09;&#xff0c;用于管理不同类型的数据包过滤规则。如下&#xff1a; 表&#xff08;Tabl…