go语言之tcp编程

2023-11-15

效果展示

原理图解

  

源码编写 

go服务端的编写 

package main

import (
	"fmt"
	"net"
)

func processData(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.Print("服务端接收到数据: ", string(buf[:n]))
		conn.Write([]byte("服务器收到"))
	}
}

func main() {
	//第一步 监听 使用 net.listen
	listen, err := net.Listen("tcp", "0.0.0.0:9999")
	if err != nil {
		fmt.Println("服务端开启监听失败 err=", err)
		return
	}
	fmt.Println("服务器开始等待连接")
	//第四步 关闭监听
	defer listen.Close()
	//第二步 等待连接 listen.Accept()
	for {
		conn, err := listen.Accept()
		if err != nil {
			fmt.Println("服务器连接异常")
		}
		fmt.Printf("客户端%v连接成功", conn.RemoteAddr())
		//第三步 开启协程处理数据
		go processData(conn)
	}
}

go语言客户端编写

package main

import (
	"bufio"
	"fmt"
	"net"
	"os"
	"strings"
)

func main() {
	//第一步 拨号连接 net.Dial
	conn, err := net.Dial("tcp", "127.0.0.1:9999")
	if err != nil {
		fmt.Println("客户端连接服务器异常 err", err)
		return
	}
	//第三步 关闭连接
	defer conn.Close()

	//第二步 处理数据
	reader := bufio.NewReader(os.Stdin)

	for {
		text, err := reader.ReadString('\n')
		if err != nil {
			fmt.Println("数据输入失败 err ", err)
			return
		}
		text = strings.Trim(text, " \r\n")
		if text == "exit" {
			fmt.Println("客户端退出")
			break
		}
		//向服务器写数据
		conn.Write([]byte(text + "\r\n"))

		//监听服务器的响应
		buf := make([]byte, 1024)
		n, err := conn.Read(buf)
		if err != nil {
			fmt.Println("读取服务器数据失败 err", err)
		}
		fmt.Println("客户端收到服务器响应 " + string(buf[:n]))
	}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

go语言之tcp编程 的相关文章

  • css中使用url不提示文件路径/不加载文件名

    情况一 若你输入 时不提示文件名时 检查你的插件 在插件商店里找到上述两款插件并且安装 安装完成后若出现 情况二 提示文件回车却不出现文件扩展名 如图 此时检查vscode中的设置 vscode左下的设置找到 L path autocomp
  • Qt 停靠悬浮窗口 使用实例

    工程中我们常用到悬浮窗口 Qt 实现停靠和悬浮使用类QDockWidget 效果 悬浮窗口 这里主要介绍怎么使用 Part1 使用流程 1 创建QDockWidget对像的停靠窗体 QDockWidget dw new QDockWidge
  • 多元有序logistic回归分析_SPSS:二元Logistic回归中自变量的处理和解读——有序多分类变量的处理...

    SPSS 二元Logistic回归中自变量的处理和解读 有序多分类变量的处理 有序多分类变量是很常见的变量形式 通常在变量中有多个可能会出现的取值 各取值之间还存在等级关系 比如高血压分级 0 正常 1 正常高值 2 1级高血压 3 2级高
  • IT大学生成长周报

    文章目录 IT大学生成长周报 第 1 期 编程语言 插桩 Linux高性能服务器代码学习 关于Mysql锁的一些知识和试验 一道关于array的题目 go spew Mysql为什么这么重要 Go编程模式 详解函数式选项模式 Go 1 18

随机推荐

  • 你可能不知道的 Android Studio 小技巧之「多行编辑」

    http blog csdn net googdev article details 52865094 Android Studio 大家应该都很熟悉了 但是可能很多人都仅限基本的功能使用 而 Android Studio 非常强大 有很多
  • 【模拟电路】3.3V供电的STM32如何输出5V电压,通过NPN三极管提供两种方法解决问题。

    STM8和STM32的供电电压如下 STM8 2 95 5 5V STM32 2 0 3 6V 我们都知道STM32的供电电压一般是3 3V 但有时我们需要5V输出 这时应该怎么办呢 下面提供两种比较常见的用法 我们都知道S8050是NPN
  • Unity进阶-ui框架学习笔记

    文章目录 Unity进阶 ui框架学习笔记 Unity进阶 ui框架学习笔记 笔记来源课程 https study 163 com course courseMain htm courseId 1212756805 trace c p k2
  • jsp页面设置UTF-8格式

    window gt preferences搜索jsp jsp页面就成功改成了UTF 8
  • Transformer(一)--论文翻译:Attention Is All You Need 中文版

    转载请注明出处 https blog csdn net nocml article details 103082600 本系列传送门 Transformer 一 论文翻译 Attention Is All You Need 中文版 Tran
  • 【论文翻译】【剪枝】Filter Pruning via Geometric Medianfor Deep Convolutional Neural Networks Acceleration

    目录 摘要 1 介绍 2 相关工作 3 方法 3 1 前置内容 3 2 基于规范的准则分析 3 3 真实场景中的Norm统计 3 4 通过几何中值进行过滤修剪 3 5 理论和现实加速 3 5 1理论加速 3 5 2 实际加速 4 实验 4
  • [LeetCode]二叉树题目总结

    LeetCode 二叉树习题个人总结 近一个月来 刷了不少LeetCode题目 但是总还是感觉提高的不多 自己最初想的一边做一边总结的初衷也没有正常执行 今晚静下心来 总结一下和二叉树有关的题目 基础题目 二叉树遍历 Binary Tree
  • 有哪些研究数据结构的好的方法?

    来源 我是码农 转载请保留出处和链接 本文链接 http www 54manong com id 17 研究数据结构是为了编写程序 编写程序是为了解决问题 用计算机求解一个现实问题 一般可用以下的问题求解模型加以描述 现实问题 数学模型 算
  • C++知识点——仿函数

    仿函数 并不是函数 却有着类似于函数的行为 简单地说就是重载括号运算符号 把对象当作一个函数用 仿函数拥有自己的数据成员 意味着仿函数拥有状态 include
  • 【MMDetection】bug记录

    bug1 if env cfg get cudnn benchmark AttributeError NoneType object has no attribute get 解决办法 配置文件缺少了env cfg信息 需要在config文
  • php error:0A000126:SSL routines::unexpected eof while reading

    文章目录 问题 解决 问题 file get contents https api weixin qq com sns jscode2session appid this gt appid secret this gt secret js
  • 32位/64位 libmysql.dll和libmysql.lib下载

    为了解决C MFC 32位程序不能连接64位MySQL数据库 需要用到32位的libmysql dll和libmysql lib 花了好久才找到 直接附上官网下载地址 https downloads mysql com archives c
  • aop中获取@PathVariable参数

    1 controller中的声明 2 aop中获取 RequestAttributes attributes RequestContextHolder getRequestAttributes ServletRequestAttribute
  • 【对比Java学Kotlin】数据类

    我们在 Java 里面会创建一些专门用于盛放数据的类 比如各种以 Bean Model 作为后缀结尾的类 这些类的成员变量通常是各种类型的数据 成员函数是 setter 和 getter 或者偷懒的同学直接把成员变量的可见性设置为 publ
  • 封装C++风格的rdkafka库

    项目中用到了kafka 系统是C 开发的 没有现成的可集成API 查阅github 发现有rdkafka 这个C库 挺好用的 但是 他依然不够简洁 因此 对他做了一下封装 ifndef KAFKAMQ H define KAFKAMQ H
  • frida的基本命令

    1 frida ps Ua 打印usb连接设备正在运行的进程 进程ID 进程名 包名 2 frida ps Uai 打印usb连接设备上所有的进程 进程ID 进程名 包名 3 frida加载js脚本 frida U l js 进程名或进程I
  • VScode 路径自动补全插件: Path Autocomplete、Path Intellisense

    目录 前言 路径自动补全插件 Path Autocomplete Path Intellisense 配置 编辑设置 json 顺路安利一个文件 icon 插件 Material Icon Theme 后记 Path Autocomplet
  • K8S生命周期---初始化容器(Init Container)

    Init 容器 Init 容器是一种特殊容器 在 Pod 内的应用容器启动之前运行 Init 容器可以包括一些应用镜像中不存在的实用工具和安装脚本 你可以在 Pod 的规约中与用来描述应用容器的 containers 数组平行的位置指定 I
  • 极氪汽车的云资源治理细探

    作者 极氪汽车吴超 前言 2021 年 极氪 001 迅速崭露头角 仅用 110 天便创下了首款车型交付量 最快破万 的纪录 2022 年 11 月 极氪 009 在短短 76 天内便率先完成了首批交付 刷新了中国豪华纯电品牌交付速度的纪录
  • go语言之tcp编程

    效果展示 原理图解 源码编写 go服务端的编写 package main import fmt net func processData conn net Conn 数据处理完之后关闭连接 defer conn Close for buf