go net包简记
TCP服务端
go语言中可以每次建立一次链接就创建一个goroutine去处理,使用goroutine实现并发非常方便和高效。
TCP服务端程序的一般处理流程
1.建立并绑定 Socket:首先服务端使用 socket() 函数建立网络套接字,然后使用 bind() 函数为套接字绑定指定的 IP 和端口;
2.监听请求:接下来,服务端使用 listen() 函数监听客户端对绑定 IP 和端口的请求;
3.接收连接:如果有请求过来,并通过三次握手成功建立连接,则使用 accept() 函数接收该链接;
4.创建goroutine去处理链接:服务端通过 read() 函数从上述已建立连接读取客户端发送的请求数据,经过处理后再通过 write() 函数将响应数据发送给客户端
TCP客户端的一般处理流程
1.建立 Socket:客户端同样使用 socket()函数建立网络套接字;
2.建立连接:建立连接:然后调用 connect() 函数传入 IP 和端口号建立与指定服务端网络程序的连接;
3.发送请求与接收响应:连接建立成功后,客户端就可以通过 write() 函数向服务端发送数据,并使用 read() 函数从服务端接收响应。
TCP服务器
package main import (
"fmt"
"log"
"net"
) func chkError(err error) {
if err != nil {
log.Fatal(err);
}
} func main() {
//创建一个TCP服务端
tcpaddr, err := net.ResolveTCPAddr("tcp4", "127.0.0.1:8081");
chkError(err);
//监听端口
tcplisten, err2 := net.ListenTCP("tcp", tcpaddr);
chkError(err2);
fmt.Println("Server Start")
//.建立链接并处理
go func(){
for {
//如果有客户端链接过来,阻塞会返回
conn, err := tcplisten.AcceptTCP()
if err != nil {
fmt.Println("Accept err", err)
continue
}
//已经与客户端建立链接,处理业务
go func() {
for {
buf := make([]byte, 512)
cnt, err := conn.Read(buf)
if err != nil {
fmt.Println("recv buf err", err)
continue
}
//回显功能
if _, err := conn.Write(buf[:cnt]); err != nil {
fmt.Println("write bak buf err", err)
continue
}
}
}()
}
}()
//阻塞状态
select {}
}
TCP客户端
package main import (
"fmt"
"net"
"time"
) func main(){
//1.创建链接远程链接服务器,得到一个conn链接
conn,err := net.Dial("tcp","127.0.0.1:8081")
if err != nil {
fmt.Println("client start err,exit!")
return
}
i := 1
for {
//2.调用链接Write写数据
_,err := conn.Write([]byte(fmt.Sprintf("%s:%d", "Hello Server", i)))
if err != nil {
fmt.Println("write conn err", err)
return
} buf := make([]byte,512)
cnt,err := conn.Read(buf)
if err != nil{
fmt.Println("read buf err")
return
}
fmt.Printf("Server call back:%s,cnt = %d\n",buf,cnt)
i++
time.Sleep(1)
}
go net包简记的更多相关文章
- py-oauth2包使用简记
接前两天线上项目py2升级py3的书,老廖的一个旧库snspy,他已经不维护了,用的api又比较久,不好升级,最后速度找了个OAuth库取代了它,由于时间紧张,直接在pypi上搜索了一下,找到这个支持 ...
- MySQL免编译二进制包安装简记
相比较于MySQL的源代码安装来说.免编译二进制包的速度实在是快了太多,而且性能损失也不是很大,同时具有一定的定制性.所以,如果没有特殊的 需求,尽量用MySQL免编译二进制包来安装MySQL. 1. ...
- Eclipse 使用简记
Eclipse 使用简记 本文针对 Eclipse Neon (4.6)版本进行说明,具体而言是 Eclipse IDE for Java EE Developers . 下载 Eclipse ecl ...
- SLF4J 使用简记
SLF4J 使用简记 使用 SLF4J有一段时间了,在此作上些许记录,以作提示. 本文使用的实际实现的日志框架是 Log4j,所以使用 log4j.properties 文件 SLF4J 需要引入的j ...
- Hive简记
在大数据工作中难免遇到数据仓库(OLAP)架构,以及通过Hive SQL简化分布式计算的场景.所以想通过这篇博客对Hive使用有一个大致总结,希望道友多多指教! 摘要: 1.Hive安装 2.Hive ...
- android系统又一次刷ROM简记(一)
当须要对android系统进行大刀阔斧的改造的时候,应该清晰的了解android各个image的组成才干做到庖丁解牛. 首先在android烧写过程中须要烧写的文件主要包含uboot.bin\boot ...
- visual studio添加docker支持简记
很久以前学过一段时间的docker,那时装了电脑卡得受不了,学了一会就卸载了,最近电脑又装上了docker,感觉好像没有以前这么卡了,还是同一台电脑surface pro4, 试了一下visual s ...
- asp.net core 3.0 更新简记
asp.net core 3.0 更新简记 asp.net core 3.0 更新简记 Intro 最近把活动室预约项目从 asp.net core 2.2 更新到了 asp.net core 3.0 ...
- docker简记
title: docker学习简记 date: 2019-10-16 15:10:39 tags: docker Docker简记 1:Docker简介 1)出现背景 一款产品从开发到上线,从操作系统 ...
随机推荐
- mybatis两种方式
// 1.传统的使用 statementId方式 //获取详情 sysApiDocumentMode = template.selectOne("oaApiDocument.getProje ...
- 2016女生专场 ABCDEF题解 其他待补...
GHIJ待补... A.HUD5702:Solving Order Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/3276 ...
- 【转】利用Eclipse编辑中文资源文件(application_zh_CN.properties )
既然生为中国人,就没有什么好抱怨的了,遇到编码的问题,那只有解决它了. 如果经常使用Struts,并做过国际化操作的人来说,对于中文资源文件的处理应该不会感到陌生的.比如下面两个文件,一个是英文的,一 ...
- 常用Java静态代码分析工具的分析与比较
给国产静态代码检测工具Pinpoint打Call! 简介 本文首先介绍了静态代码分析的基本概念及主要技术,随后分别介绍了4种现有的主流Java静态代码分析工具 (Checkstyle,FindBugs ...
- java实现阿里云短信服务发送验证码
由于做项目的时候遇到了接第三方短信服务,所以记录一下. 一.新建一个maven项目并导入相关依赖 <!--手机发送短信验证码--> <dependency> <group ...
- Spring Boot2 系列教程 (五) | yaml 配置文件详解
自定义属性加载 首先构建 SpringBoot 项目,不会的看这篇旧文 使用 IDEA 构建 Spring Boot 工程. 首先在项目根目录 src >> resource >&g ...
- postman的测试,用对象接收所有的字符串
1.post请求 Headers: Content-Type application/json { "taskId":"1000001161", " ...
- python 栈
栈的特点:先进后出 class Stack: def __init__(self): self.data = [] def push(self, val): self.data.append(val) ...
- log4j的xml配置
主要记录下方便下次查找 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:conf ...
- python接口自动化中,注册接口随机生成手机号码
如大家所知在注册接口中,手机号参数需要的是未注册的手机号,而在测试用例中,你写入的手机号不一定是未注册的.所以这时需要对注册接口中传入的手机号做处理.下面我就分享一个课程里面学到的一个处理手机号的py ...