【go笔记】TCP编程
前言
- TCP服务端的处理流程
- 监听端口
- 接收客户端请求建立连接
- 创建goroutine处理链接
示例代码:TCP服务端
package main
import (
"net"
"bufio"
"fmt"
)
// 处理函数
func process(conn net.Conn) {
// 最终关闭连接
defer conn.Close()
for {
reader := bufio.NewReader(conn)
var buf [128]byte
// 读取数据
n,err := reader.Read(buf[:])
if err != nil {
fmt.Println("Read from client failed, error: ",err)
break
}
recvStr := string(buf[:n])
fmt.Println("收到client端发来的数据: ",recvStr)
// 发送数据
conn.Write([]byte(recvStr))
}
}
func main() {
listen, err := net.Listen("tcp", "0.0.0.0:8000")
if err != nil {
fmt.Println("Listen Port 0.0.0.0:8000 failed, error: ",err)
return
}
for {
conn, err := listen.Accept()
if err != nil {
fmt.Println("Accept failed, error: ",err)
continue
}
go process(conn)
}
}
示例代码:TCP客户端
package main
import (
"fmt"
"net"
"bufio"
"os"
"strings"
)
func main() {
conn, err := net.Dial("tcp", "127.0.0.1:8000")
if err != nil {
fmt.Println("connect to 127.0.0.1:8000 error, error: ",err)
return
}
// 关闭连接
defer conn.Close()
inputReader := bufio.NewReader(os.Stdin)
for {
// 读取输入
input,_ := inputReader.ReadString('\n')
inputInfo := strings.Trim(input, "\r\n")
// 输入q推出
if strings.ToUpper(inputInfo) == "Q" {
return
}
// 发送数据
_,err = conn.Write([]byte(inputInfo))
if err != nil {
fmt.Println(err)
return
}
buf := [512]byte{}
n, err := conn.Read(buf[:])
if err != nil {
fmt.Println("recv failed, error: ",err)
return
}
fmt.Println(string(buf[:n]))
}
}
参考文档
【go笔记】TCP编程的更多相关文章
- 在做关于NIO TCP编程小案例时遇到无法监听write的问题,没想到只是我的if语句的位置放错了位置,哎,看了半天没看出来
在做关于NIO TCP编程小案例时遇到无法监听write的问题,没想到只是我的if语句的位置放错了位置,哎,看了半天没看出来 贴下课堂笔记: 在Java中使用NIO进行网络TCP套接字编程主要以下几个 ...
- [Java入门笔记] 面向对象编程基础(二):方法详解
什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...
- Java TCP编程
Java编写TCP编程--回射信息实例 注:简单的tcp联系,还存在问题,readUTF()为阻塞型,如果之前的用户一直不输入,则一直阻塞,之后的用户再连接会出现问题. import java.io. ...
- [C# 网络编程系列]专题五:TCP编程
转自:http://www.cnblogs.com/zhili/archive/2012/08/25/2656840.html 前言 前面专题的例子都是基于应用层上的HTTP协议的介绍, 现在本专题来 ...
- python中的TCP编程学习
今天看了一下关于python的TCP编程. 发现思路和其他语言(比如java)思路基本上差点儿相同. 先看client.基本过程例如以下: 第一步:创建一个socket 第二步:建立连接 第三步:发送 ...
- python笔记之编程风格大比拼
python笔记之编程风格大比拼 虽然我的python age并不高,但我仍然愿意将我遇到的或者我写的有趣的python程序和大家一块分享,下面是我找到的一篇关于各类python程序员的编程风格的比较 ...
- ufldl学习笔记和编程作业:Feature Extraction Using Convolution,Pooling(卷积和汇集特征提取)
ufldl学习笔记与编程作业:Feature Extraction Using Convolution,Pooling(卷积和池化抽取特征) ufldl出了新教程,感觉比之前的好,从基础讲起.系统清晰 ...
- ufldl学习笔记和编程作业:Softmax Regression(softmax回报)
ufldl学习笔记与编程作业:Softmax Regression(softmax回归) ufldl出了新教程.感觉比之前的好,从基础讲起.系统清晰,又有编程实践. 在deep learning高质量 ...
- C#网络程序设计(3)网络传输编程之TCP编程
网络传输编程指基于各种网络协议进行编程,包括TCP编程,UDP编程,P2P编程.本节介绍TCP编程. (1)TCP简介: TCP是TCP/IP体系中最重要的传输层协议,它提供全双工和可 ...
- 【Socket编程】通过Socket实现TCP编程
通过Socket实现TCP编程 Socket通信 : 1.TCP协议是面向对象连接.可靠的.有序的,以字节流的方式发送数据. 2.基于TCP协议实现网络通信的类: 客户端----Socket类 服务器 ...
随机推荐
- #Python基础 利用Pyinstaller 模块对python代码进行打包exe
一般我们都用 Python 的 Pyinstaller 模块进行打包,这里记录Pyinstaller 模块进行打包. 一:安装 Pyinstaller 模块 pip install PyInstall ...
- 2020-08-31:描述HTTP的版本之间的区别,主要是1.0/1.1/2.0三个版本的区别。
福哥答案2020-08-31: HTTP1.0与HTTP1.1的主要区别 1.长连接HTTP1.0:需要使用keep-alive参数来告知服务器端要建立一个长连接.HTTP1.1:默认支持长连接.2. ...
- 2022-02-14:k8s安装gogs,yaml如何写?
2022-02-14:k8s安装gogs,yaml如何写? 答案2022-02-14: yaml如下: apiVersion: v1 kind: Service metadata: labels: a ...
- 使用 MRKL 系统跨越神经符号鸿沟
本文展示了自然语言处理的下一步发展--模块化推理.知识和语言( the Modular Reasoning, Knowledge and Language,简称为MRKL)系统以及LangChain和 ...
- 理论+实操,带你了解多沙箱容器运行时Kuasar
摘要:华为云DTSE技术布道师张天阳结合沙箱容器发展历程,介绍华为云多沙箱容器运行时 Kuasar 项目优势,开启多沙箱容器运行时上手实践体验. 本文分享自华为云社区<理论+实操,带你了解多沙箱 ...
- Java配置线程池
一.Java配置线程池 1.线程池分类.其他 1.1.分类 IO密集型 和 CPU密集型 任务的特点不同,因此针对不同类型的任务,选择不同类型的线程池可以获得更好的性能表现. 1.1. IO密集型任务 ...
- 计算机网络 VRRP和DHCP
目录 一.vrrp概念 二.vrrp工作过程 三.vrrp优先级 四.vrrp实验 五.DHCP概念 六.DHCP工作过程 七.DHCP实验 一.vrrp概念 概念:称虚拟路由器冗余协议,当网关路由器 ...
- macbook苹果m1芯片训练机器学习、深度学习模型,resnet101在mnist手写数字识别上做加速,torch.device("mps")
apple的m1芯片比以往cpu芯片在机器学习加速上听说有15倍的提升,也就是可以使用apple mac训练深度学习pytorch模型!!!惊呆了 安装apple m1芯片版本的pytorch 然后使 ...
- Linux系统 2023年5月1号
今天正式进入了LINUX基础核心 下载了centos7.4镜像 和vmware12版本,还未安装vmware和centos镜像7.4
- 逍遥自在学C语言 | 枚举的那些事儿
前言 在C语言中,枚举是一种方便组织和表示一组相关常量的工具.枚举类型有助于提高代码的可读性和可维护性.本文将介绍C语言枚举的基本概念.语法和用法,以及一些高级技巧. 一.人物简介 第一位闪亮登场,有 ...