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)
}
}
- Android 使用dagger2进行依赖注入(基础篇)
- Html小知识总结
- 如何训练一个性能不错的深度神经网络
- 使用AndroidStudio编译NDK的方法及错误解决方案
- 计算机视觉 | Python OpenCV 3 使用背景减除进行目标检测
- linux(centos)搭建SVN服务器
- 简单的Hibernate入门简介
- 思梦PHP-阿里大鱼手机验证码
- IIS 安装 pydio
- 面试机器学习、大数据岗位时遇到的各种问题
- ThinkPHP连续签到小案例
- Windows环境配置Apache+Mysql+PHP
- 如何使用Retrofit获取服务器返回来的JSON字符串
- Python相对、绝对导入浅析
- 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 数组属性和方法
- Hive-1.2.1_02_简单操作与访问方式
- PHP-CGI远程代码执行漏洞(CVE-2012-1823)分析
- Hive-1.2.1_03_DDL操作 1.1. Create Database1.2. Drop Database1.3. Use Database2.1. Cre
- Hive-1.2.1_04_DML操作 5.1. Join8.1. 使用案例8.2. Transform实现
- Hive-1.2.1_05_案例操作
- Mysql字符编码利用技巧
- Hive-1.2.1_06_累计报表查询
- Flume-1.8.0_部署与常用案例
- GlassFish 目录穿越漏洞测试过程
- 安装CDH7.1.1
- GIT-SHELL 沙盒绕过(CVE-2017-8386)
- Azkaban-2.5.0-部署与常见案例
- 无字母数字webshell之提高篇
- Sqoop-1.4.7-部署与常见案例
- Hbase-2.0.0_01_安装部署