Golang使用协程通过Socket实现客户端向服务端发送数据,服务端接收数据
一、服务端代码:
package mainimport("fmt""net"
)func process(conn net.Conn) {//延迟关闭目前连接defer conn.Close()for{buf:=make([]byte, 1024)fmt.Printf("服务器在等待客户端%s 发送信息\n", conn.RemoteAddr().String())n, err:=conn.Read(buf)if err!=nil{fmt.Printf("客户端退出 err=%v\n",err)return}fmt.Printf(string(buf[:n]))}
}func main(){fmt.Printf("服务器开始监听...")//监听一个端口listen, err:=net.Listen("tcp", ":8888")if err!=nil{fmt.Println("listen err=",err)return}//延迟关闭连接defer listen.Close()//循环等待客户端来连接for{fmt.Println("等待客户端来连接...")conn, err:=listen.Accept()//错误处理和输出当前连接客户端信息if err!=nil{fmt.Println("Accept() err=", err)}else{fmt.Printf("Accept() suc con=%v 客户端ip=%v\n", conn, conn.RemoteAddr().String())}//开一个协程专门处理当前连接的客户端go process(conn)}
}
二、客户端代码:
package mainimport("fmt""net""bufio""os""strings"
)func main() {//建立连接conn, err:=net.Dial("tcp", "127.0.0.1:8888")if err!=nil{fmt.Println("client dial err=",err)return}//从标准输入流当中获取一个reader,方便客户端用户输入reader:=bufio.NewReader(os.Stdin)for{line,err:=reader.ReadString('\n')//错误处理if err!=nil{fmt.Println("readString err=",err)}//如果用户输入的是exit就退出line=strings.Trim(line, " \r\n")if line=="exit"{fmt.Println("客户端退出...")break}//将line发送给服务端n,err:=conn.Write([]byte(line))if err!=nil{fmt.Println("conn.Write err=", err)}fmt.Printf("客户端发送了%d字节的数据\n", n)}
}
三、运行结果:
(1)服务端
(2)客户端
Golang使用协程通过Socket实现客户端向服务端发送数据,服务端接收数据相关推荐
- golang异步协程调度原理
golang异步协程调度 在1.14的go版本中,官方通过加入信号来进行协程的调度,后续就都支持了这种异步协程抢占,避免了早起的考栈调度时来检查是否执行超时的逻辑.本文简单来对比这种实现的原理. 调度 ...
- k8s与监控--从telegraf改造谈golang多协程精确控制
从telegraf改造谈golang多协程精确控制 前言 telegraf是infuxdb公司开源出来的一个基于插件机制的收集metrics的 项目.整个架构和elastic公司的日志收集系统极其类似 ...
- Golang的协程调度
调度的基础,模型关系的映射 GPM模型: G,Goroutinue 被调度器管理的轻量级线程,goroutine使用go关键字创建 调度系统的最基本单位goroutine,存储了goroutine的执 ...
- Golang的协程调度器原理及GMP设计思想
一.Golang"调度器"的由来? (1) 单进程时代不需要调度器 我们知道,一切的软件都是跑在操作系统上,真正用来干活(计算)的是CPU.早期的操作系统每个程序就是一个进程,知道 ...
- python中使用socket编程实现带有界面的客户端向服务端发送文件和下载文件
一主界面: **二:发送文件界面:**首先需要开启发送文件服务端(这里需要注意的是每一次发送文件之前都需要开启一次服务端,因为我在这里将每一次发送文件之后就关闭了客户端和服务端之间的连接) 输出相关客 ...
- java服务器向客户端发消息_java一个简单的客户端向服务端发送消息
java一个简单的客户端向服务端发送消息 客户端代码: package com.chenghu.tcpip; import java.io.IOException; import java.io.Ou ...
- 魔坊APP项目-22-种植园,种植栏的功能实现,客户端根据激活状态和未激活状态分别显示树桩、服务端提供种植植物的相关数据、解锁树桩、植物相关道具使用
种植园 一.种植栏的功能实现 1. 客户端需要的植物相关参数: 总树桩数量, 当前用户激活树桩数量, 当前种植的树桩数量, 树桩列表状态 2. 客户端根据激活状态和未激活状态分别显示树桩 3. 服务端 ...
- UE4 TCP通信 (UE客户端与网络调试助手服务端、python服务端通信)
目录 一.使用UE4建立TCP客户端 二.使用网络调试助手建立服务端 三.基于网络调试助手的服务端与UE客户端通信 四.基于python的TCP服务端与UE客户端通信 一.使用UE4建立TCP客户端 ...
- Golang的协程(goroutine)和同步机制
1.协程介绍 进程和线程都是由操作系统内核进行调度,有 CPU 时间片的概念,进行抢占式调度. 协程是用户级的线程,对内核是透明的,系统并不知道协程的存在,并且协程是非 ...
最新文章
- 道路场景语义分割算法
- 读博士所面临问题的解决对策
- Stanford NLP 解读 ACL 2018 论文——用于调试 NLP 模型的语义等价对立规则
- Java Enum 使用
- dataframe的drop無效
- 横向扩展你的ASP.NET Core SignalR 应用
- indesign教程,如何转换图形和框架?
- Linux 平台下 Tomcat 的安装与优化
- java中的map是什么_Java中Map的使用
- 在线安装Eclipse插件时,出现错误
- 相关性和显著性检验学习笔记
- J9数字货币论:什么是区块链节点
- Python 实现Jaccard相似度计算,判断英文新闻标题相似度
- 女人为什么喜欢抱着男人睡觉,一定…
- Java中变量与常量
- html页面点击小图弹出大图代码,利用JS实现点击小图弹出大图代码
- Redis Guava 布隆过滤器实现和准确率测试
- Apache Spark3.0什么样?一文读懂Apache Spark最新技术发展与展望
- 查看xgboost版本
- 《Nginx实战教程》专栏介绍
热门文章
- 2006年最变态语录
- 全球及中国海洋经济产业十四五运行规划与投资动向分析报告2022版
- 更好的时代,更好的AMD
- 2018整理最全的100道Redis面试题!转自(风云社区:www.scoee.com)
- 制作一个注册表单页面
- DotNetBar for Windows Forms 12.9.0.0_冰河之刃重打包版及制作Visual Studio C#项目模板文件详解...
- (二) prometheus报警-----自定义 / alertmanager监控,报警设置
- 绝对最全!直接收藏!料箱类自动化仓储系统大全集!
- Android项目文件结构
- B2B经销商渠道管理系统-全面赋能渠道管理,加速交易效率