golang中的tcp编程
1. tcp server
package main import (
"bufio"
"fmt"
"net"
) func main() {
// 1. 监听端口
listener, err := net.Listen("tcp", "127.0.0.1:8080")
if err != nil {
fmt.Println("listen fail err", err)
return
} defer listener.Close() for {
// 2. 接收客户端请求建立链接
conn, err := listener.Accept()
if err != nil {
fmt.Println("accept fail err", err)
continue
} // 3. 创建goroutine处理链接
go process(conn) }
} func process(conn net.Conn) {
defer fmt.Println("conn链接关闭了")
defer conn.Close() // 关闭链接 reader := bufio.NewReader(conn)
for {
var buf [4096]byte
n, err := reader.Read(buf[:]) // 读取数据
if err != nil {
break
}
recvStr := string(buf[:n])
fmt.Println("收到Client发来的数据:", recvStr)
recvStr = "serer" + recvStr
conn.Write([]byte(recvStr))
} }
2. tcp client
package main import (
"bufio"
"fmt"
"net"
"os"
"strings"
) func main() {
// 建立与服务器的链接
conn, err := net.Dial("tcp", "127.0.0.1:8080")
if err != nil {
fmt.Println("Dial fail err", err)
return
} // 关闭链接
defer conn.Close() inputReader := bufio.NewReader(os.Stdin)
// 进行数据的收发
for {
input, _ := inputReader.ReadString('\n')
inputInfo := strings.Trim(input, "\r\n")
if strings.ToUpper(inputInfo) == "Q" { // 如果用户输入的是q/Q就退出
return
} // 发送数据
_, err := conn.Write([]byte(inputInfo))
if err != nil {
fmt.Println("Write fail err", err)
return
} // 接收数据
buf := [4096]byte{}
n, err := conn.Read(buf[:])
if err != nil {
fmt.Println("Read fail err", err)
return
}
fmt.Println("收到server发来的数据:", string(buf[:n])) } }
golang中的tcp编程的更多相关文章
- golang中的socket编程
0.1.索引 https://waterflow.link/articles/1664591292871 1.tcp的3次握手(建立连接) 客户端的协议栈向服务器端发送了 SYN 包,并告诉服务器端当 ...
- python中的TCP编程学习
今天看了一下关于python的TCP编程. 发现思路和其他语言(比如java)思路基本上差点儿相同. 先看client.基本过程例如以下: 第一步:创建一个socket 第二步:建立连接 第三步:发送 ...
- qt中的tcp编程
server .server.h #define DIALOG_H #include <QDialog> #include <QTcpServer> #include < ...
- Python中的TCP编程,实现客户端与服务器的聊天(socket)
参考大神blog:自己再写一个 https://blog.csdn.net/qq_31187881/article/details/79067644
- golang中的udp编程
1. udp server package main import ( "fmt" "net" ) func main() { // udp server li ...
- C#网络程序设计(3)网络传输编程之TCP编程
网络传输编程指基于各种网络协议进行编程,包括TCP编程,UDP编程,P2P编程.本节介绍TCP编程. (1)TCP简介: TCP是TCP/IP体系中最重要的传输层协议,它提供全双工和可 ...
- 网游中的网络编程系列1:UDP vs. TCP
原文:UDP vs. TCP,作者是Glenn Fiedler,专注于游戏网络编程相关工作多年. 目录 网游中的网络编程系列1:UDP vs. TCP 网游中的网络编程2:发送和接收数据包 网游中的网 ...
- 用java网络编程中的TCP方式上传文本文件及出现的小问题
自己今天刚学java网络编程中的TCP传输,要用TCP传输文件时,自己也是遇到了一些问题,抽空把它整理了一下,供自己以后参考使用. 首先在这个程序中,我用一个客户端,一个服务端,从客户端上传一个文本文 ...
- golang中的RPC开发-2
RPC简介 远程过程调用(Remote Procedure Call,RPC)是一个计算机通信协议 该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程 如果 ...
随机推荐
- Vue2使用Axios发起请求教程详细
当你看到该文章时希望你已知晓什么是跨域请求以及跨域请求的处理,本文不会赘述 本文后台基于Springboot2.3进行搭建,Controller中不会写任何业务逻辑仅用于配合前端调试 Controll ...
- Intellij IDEA添加插件
1. Lombok插件 IDEA增加对Lombok的支持 <!--lombok插件--> <dependency> <groupId>org.projectlomb ...
- 【LeetCode】476. 数字的补数 Number Complement
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 公众号:负雪明烛 本文关键词:Leetcode, 力扣,476, 补数,二进制,Pyth ...
- 【LeetCode】45. Jump Game II 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 贪心 日期 题目地址:https://leetcod ...
- 【剑指Offer】连续子数组的最大和 解题报告(Python)
[剑指Offer]连续子数组的最大和 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews ...
- 【剑指Offer】数据流中的中位数 解题报告(Python)
[剑指Offer]数据流中的中位数 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews ...
- .NET Core 实现动态代理做AOP(面向切面编程)
1.介绍 1.1 动态代理作用 用动态代理可以做AOP(面向切面编程),进行无入侵式实现自己的扩展业务,调用者和被调用者之间的解耦,提高代码的灵活性和可扩展性,比如:日志记录.性能统计.安全控制.事务 ...
- Decoupling Representation and Classifier for Long-tailed Recognition
目录 概 主要内容 Sampling 分类器 代码 Kang B., Xie S., Rohrbach M., Yan Z., Gordo A., Feng J. and Kalantidis Y. ...
- Adversarial Self-Supervised Contrastive Learning
目录 概 主要内容 Linear Part 代码 Kim M., Tack J. & Hwang S. Adversarial Self-Supervised Contrastive Lear ...
- 如何使用Navicat连接宝塔面板上安装的mysql数据库?
运行环境描述 阿里云ECS 系统:CentOS Linux 7.4.1708 (Core) 宝塔面板: 6.9.0 数据库:MySQL 5.7.19 Navicat 远程连接 Navicat报错信息: ...