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)是一个计算机通信协议 该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程 如果 ...
随机推荐
- [源码解析] PyTorch 分布式之弹性训练(3)---代理
[源码解析] PyTorch 分布式之弹性训练(3)---代理 目录 [源码解析] PyTorch 分布式之弹性训练(3)---代理 0x00 摘要 0x01 总体背景 1.1 功能分离 1.2 Re ...
- 【LeetCode】188. Best Time to Buy and Sell Stock IV 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
- kafka2.x常用命令笔记(一)创建topic,查看topic列表、分区、副本详情,删除topic,测试topic发送与消费
接触kafka开发已经两年多,也看过关于kafka的一些书,但一直没有怎么对它做总结,借着最近正好在看<Apache Kafka实战>一书,同时自己又搭建了三台kafka服务器,正好可以做 ...
- [算法笔记-题解]问题 D: 习题4-4 三个整数求最大值
问题 D: 习题4-4 三个整数求最大值 [命题人 : 外部导入] 时间限制 : 1.000 sec 内存限制 : 12 MB 题目描述 有3个整数a, b, c,由键盘输入,输出其中最大的数. 输入 ...
- <学习opencv>绘画和注释
/*=========================================================================*/ // 绘画 和 注释 /*========= ...
- Java程序设计基础笔记 • 【第5章 循环结构】
全部章节 >>>> 本章目录 5.1 while循环结构 5.1.1 循环简介 5.1.2 while循环 5.1.3 while循环的使用 5.1.4 while循环的注 ...
- MySQL存储过程入门基础
创建存储过程无参语法: delimiter // create procedure 函数名() begin 业务逻辑 end // call 函数名() 通过函数名调用存储过程 创建存储过程有参与法: ...
- linux中vim编辑器的翻页命令
Linux jdk查看文件的最后一行 输入$回车 查看文件的第一行 输入0或者1回车 向前翻页 Ctrl + f f为forw ...
- centos7.5上安装go1.13.4
一.安装 1.下载go1.13.4.linux-amd64.tar.gz 先进入官网https://golang.google.cn/ 再 https://golang.google.cn/doc/i ...
- java 代理模式 总结
1.前言 最近舍友去面试遇到了关于java代理模式的问题. 我虽然知道怎么使用,但是没有做过正经的总结,因此有了这篇随笔,好好总结一下三大代理模式底层原理. 事实上,在开发项目的时候,基本用不上代理, ...