go语言 tcp通信例子
时间:2022-05-06
本文章向大家介绍go语言 tcp通信例子,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
go 的tcp的应用层代码看起来极为简单
1,多个协程同时Accept , 不知道这种实现有没有什么问题
2,多个协程同时处理网络IO事件, 貌似意味着, 有多少个连接过来就需要有多少个协程了, 对于go来说,一个进程支持足够都的协程, 远远大于带宽的限制
服务端代码
package main
import (
"net"
"time"
"fmt"
)
func ca(){
a := recover()
fmt.Println("Catch", a)
}
func main(){
defer ca()
fmt.Println("main start")
L, e:=net.Listen("tcp", "127.0.0.1:7878")
if e != nil{
fmt.Println("this is null")
panic("claa null")
}
for index:=0; index<10; index++{
go handleAccept(L, index)
}
for{
time.Sleep(1e9)
}
}
func handleAccept(L net.Listener, index int){
for{
fmt.Println("Accept index=", index)
a, ae := L.Accept()
if ae != nil{
fmt.Println("Accept index quit", index)
break
}
go handleConnect(a)
}
}
func handleConnect(c net.Conn){
for{
var buffer []byte = make([]byte, 1024)
len, re := c.Read(buffer)
if len == 0 && "EOF" == re.Error(){
fmt.Println("quit")
c.Close()
break
}
var dd string = string(buffer)
fmt.Println(len, re, "data:", dd)
}
}
客户端代码:
package main
import (
"net"
"time"
"strconv"
"fmt"
)
func Send(){
conn, e := net.Dial("tcp", "127.0.0.1:7878")
if e != nil{
panic("e is nil")
}
var index int = 0
for{
var data string = strconv.Itoa(index)
len, e:=conn.Write([]byte(data))
if e != nil{
fmt.Println(len, e, "Close Connct")
conn.Close()
}
index = index+1
time.Sleep(1e9)
}
}
func main(){
fmt.Println("client main start")
for index:=0; index<100; index++{
go Send()
}
for{
time.Sleep(1e9)
}
}
- Spring(一)Spring的第一滴血
- Flume(一)Flume原理解析
- 我所理解的Remoting (2) :远程对象的生命周期管理[下篇]
- struts2(六)之ognl表达式与ActionContext、ValueStack
- Windows8异步编程的注意事项
- CSS魔法堂:深入理解line-height和vertical-align
- Gradle 10分钟上手指南
- gradle项目中profile的实现
- 欧盟推出“数字经济税收制度”优化了税收制度,却影响区块链行业
- CSS魔法堂:你一定误解过的Normal flow
- ASP.NET输出JSON格式数据
- haproxy 新手上路
- 区块链是如何保护交易隐私的?eprint这篇论文告诉你答案
- gradle项目中资源文件的相对路径打包处理技巧
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 刷面试题的正确姿势!Android400道面试题+通关知识宝典助你进大厂,查漏补缺
- 3分钟短文:Laravel路由加模型等于?
- TSF微服务无法查看JVM监控问题
- Mitmproxy 的安装与使用案例
- leetcode之Bigram分词
- TensorFlow2 开发指南 | 01 手写数字识别快速入门
- Spring 数据初始 H2 后进行数据查询提示 Schema not found 错误
- Discourse CentOS 8 全新安装手册
- H2 数据库插入时间的方法
- Spring 配置的 H2 控制台 frameOptions 导致无法访问
- Spring Boot 和 Hibernate 的 H2 数据库配置来进行启动测试
- Java时间处理-LocalDateTime简介
- iOS音视频接入 - TRTC iOS端真机日志导出
- jQuery根据填写的input的数值导出excel表格
- 小程序根据返回值英文渲染出对应的中文