前言

  • 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编程的更多相关文章

  1. 在做关于NIO TCP编程小案例时遇到无法监听write的问题,没想到只是我的if语句的位置放错了位置,哎,看了半天没看出来

    在做关于NIO TCP编程小案例时遇到无法监听write的问题,没想到只是我的if语句的位置放错了位置,哎,看了半天没看出来 贴下课堂笔记: 在Java中使用NIO进行网络TCP套接字编程主要以下几个 ...

  2. [Java入门笔记] 面向对象编程基础(二):方法详解

    什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...

  3. Java TCP编程

    Java编写TCP编程--回射信息实例 注:简单的tcp联系,还存在问题,readUTF()为阻塞型,如果之前的用户一直不输入,则一直阻塞,之后的用户再连接会出现问题. import java.io. ...

  4. [C# 网络编程系列]专题五:TCP编程

    转自:http://www.cnblogs.com/zhili/archive/2012/08/25/2656840.html 前言 前面专题的例子都是基于应用层上的HTTP协议的介绍, 现在本专题来 ...

  5. python中的TCP编程学习

    今天看了一下关于python的TCP编程. 发现思路和其他语言(比如java)思路基本上差点儿相同. 先看client.基本过程例如以下: 第一步:创建一个socket 第二步:建立连接 第三步:发送 ...

  6. python笔记之编程风格大比拼

    python笔记之编程风格大比拼 虽然我的python age并不高,但我仍然愿意将我遇到的或者我写的有趣的python程序和大家一块分享,下面是我找到的一篇关于各类python程序员的编程风格的比较 ...

  7. ufldl学习笔记和编程作业:Feature Extraction Using Convolution,Pooling(卷积和汇集特征提取)

    ufldl学习笔记与编程作业:Feature Extraction Using Convolution,Pooling(卷积和池化抽取特征) ufldl出了新教程,感觉比之前的好,从基础讲起.系统清晰 ...

  8. ufldl学习笔记和编程作业:Softmax Regression(softmax回报)

    ufldl学习笔记与编程作业:Softmax Regression(softmax回归) ufldl出了新教程.感觉比之前的好,从基础讲起.系统清晰,又有编程实践. 在deep learning高质量 ...

  9. C#网络程序设计(3)网络传输编程之TCP编程

        网络传输编程指基于各种网络协议进行编程,包括TCP编程,UDP编程,P2P编程.本节介绍TCP编程.     (1)TCP简介: TCP是TCP/IP体系中最重要的传输层协议,它提供全双工和可 ...

  10. 【Socket编程】通过Socket实现TCP编程

    通过Socket实现TCP编程 Socket通信 : 1.TCP协议是面向对象连接.可靠的.有序的,以字节流的方式发送数据. 2.基于TCP协议实现网络通信的类: 客户端----Socket类 服务器 ...

随机推荐

  1. 在nuxt下引入外部js

    最近在踩nuxt.js的坑,遇到了许多问题,在这里记录一下,方便以后查阅. 1.如何引入外部js 如果是插件,可以在package.json中写明名字和版本,在nuxt.config.js中注册,然后 ...

  2. Llinux系统(Centos/Ubuntu/Debian)弹性云数据盘home扩容|云盘一键分扩容

    一.脚本自动处理 适用:数据盘home分区升级扩容合并.云盘升级扩容合并.(注意:不要在宝塔面板终端执行) 输入以下命令执行:  wget -O homeV31.sh http://downinfo. ...

  3. [OS/Linux] Linux核心参数:net.core.somaxconn(高并发场景核心参数)

    0 序言 近期工作在搞压力测试,我负责开发维护的.基于sring-cloud-gateway的大数据网关微服务,其底层是基于spring-webflux-->reactor-netty--> ...

  4. Grafana系列-统一展示-7-ElasticSearch数据源

    系列文章 Grafana 系列文章 ElasticSearch 数据源 Grafana内置了对Elasticsearch的支持.你可以进行多种类型的查询,以可视化存储在Elasticsearch中的日 ...

  5. 2021-02-15:给定一个整型数组arr,代表数值不同的纸牌排成一条线。玩家A和玩家B依次拿走每张纸牌,规定玩家A先拿,玩家B后拿。但是每个玩家每次只能拿走最左或最右的纸牌,玩家A和玩家B都绝顶聪明。请返回最后获胜者的分数。

    2021-02-15:给定一个整型数组arr,代表数值不同的纸牌排成一条线.玩家A和玩家B依次拿走每张纸牌,规定玩家A先拿,玩家B后拿.但是每个玩家每次只能拿走最左或最右的纸牌,玩家A和玩家B都绝顶聪 ...

  6. var,let,const的区别

    JS中变量的定义方式有四种 不写var,let,const--直接定义变量 a = 10; 使用var关键字定义 var a = 10; 使用let关键字定义 let a = 10; 使用const关 ...

  7. uni-app 打包发行

    1.云端 发行-原生App-云打包 2.离线 运行-原生App本地打包-生成本地打包资源,如果提示安装依赖包,安装即可 注意:项目的AppID不能为空,请在该项目下的manifest.json中重新获 ...

  8. Element Cascader 级联选择器去除空叶子节点

    此处以后端获取部门级联List为例 以下为数据结构 { data: { children: [ 0:{childre:[ 0:{}, 1:{} ]}, 1:{}, 2:{}, 3:{}, 4:{}, ...

  9. 【Linux】详解六种配置Linux环境变量的方法(以centos为例)

    本文时间 2023-05-19 作者:sugerqube漆瓷 本文重理解,!!忽略环境变量加载原理!! 本文目标:理解六大环境变量配置,选择合适的配置文件进行配置 配置环境的理由 以shell编程为例 ...

  10. 【CF】掉分总结

    比赛总结 前情提要 自从前段时间连续掉分,就心态崩了,还是自己太菜,一直想写个总结,看看这几场比赛都干了啥,以后准备怎么办.鸽了这么久的总结,是该写写了. 这是正文 首先大致提一下情感曲线(菜的真实) ...