1. tcp server

  1. package main
  2.  
  3. import (
  4. "bufio"
  5. "fmt"
  6. "net"
  7. )
  8.  
  9. func main() {
  10. // 1. 监听端口
  11. listener, err := net.Listen("tcp", "127.0.0.1:8080")
  12. if err != nil {
  13. fmt.Println("listen fail err", err)
  14. return
  15. }
  16.  
  17. defer listener.Close()
  18.  
  19. for {
  20. // 2. 接收客户端请求建立链接
  21. conn, err := listener.Accept()
  22. if err != nil {
  23. fmt.Println("accept fail err", err)
  24. continue
  25. }
  26.  
  27. // 3. 创建goroutine处理链接
  28. go process(conn)
  29.  
  30. }
  31. }
  32.  
  33. func process(conn net.Conn) {
  34. defer fmt.Println("conn链接关闭了")
  35. defer conn.Close() // 关闭链接
  36.  
  37. reader := bufio.NewReader(conn)
  38. for {
  39. var buf [4096]byte
  40. n, err := reader.Read(buf[:]) // 读取数据
  41. if err != nil {
  42. break
  43. }
  44. recvStr := string(buf[:n])
  45. fmt.Println("收到Client发来的数据:", recvStr)
  46. recvStr = "serer" + recvStr
  47. conn.Write([]byte(recvStr))
  48. }
  49.  
  50. }

  

2. tcp client

  1. package main
  2.  
  3. import (
  4. "bufio"
  5. "fmt"
  6. "net"
  7. "os"
  8. "strings"
  9. )
  10.  
  11. func main() {
  12. // 建立与服务器的链接
  13. conn, err := net.Dial("tcp", "127.0.0.1:8080")
  14. if err != nil {
  15. fmt.Println("Dial fail err", err)
  16. return
  17. }
  18.  
  19. // 关闭链接
  20. defer conn.Close()
  21.  
  22. inputReader := bufio.NewReader(os.Stdin)
  23. // 进行数据的收发
  24. for {
  25. input, _ := inputReader.ReadString('\n')
  26. inputInfo := strings.Trim(input, "\r\n")
  27. if strings.ToUpper(inputInfo) == "Q" { // 如果用户输入的是q/Q就退出
  28. return
  29. }
  30.  
  31. // 发送数据
  32. _, err := conn.Write([]byte(inputInfo))
  33. if err != nil {
  34. fmt.Println("Write fail err", err)
  35. return
  36. }
  37.  
  38. // 接收数据
  39. buf := [4096]byte{}
  40. n, err := conn.Read(buf[:])
  41. if err != nil {
  42. fmt.Println("Read fail err", err)
  43. return
  44. }
  45. fmt.Println("收到server发来的数据:", string(buf[:n]))
  46.  
  47. }
  48.  
  49. }

  

golang中的tcp编程的更多相关文章

  1. golang中的socket编程

    0.1.索引 https://waterflow.link/articles/1664591292871 1.tcp的3次握手(建立连接) 客户端的协议栈向服务器端发送了 SYN 包,并告诉服务器端当 ...

  2. python中的TCP编程学习

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

  3. qt中的tcp编程

    server .server.h #define DIALOG_H #include <QDialog> #include <QTcpServer> #include < ...

  4. Python中的TCP编程,实现客户端与服务器的聊天(socket)

    参考大神blog:自己再写一个 https://blog.csdn.net/qq_31187881/article/details/79067644

  5. golang中的udp编程

    1. udp server package main import ( "fmt" "net" ) func main() { // udp server li ...

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

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

  7. 网游中的网络编程系列1:UDP vs. TCP

    原文:UDP vs. TCP,作者是Glenn Fiedler,专注于游戏网络编程相关工作多年. 目录 网游中的网络编程系列1:UDP vs. TCP 网游中的网络编程2:发送和接收数据包 网游中的网 ...

  8. 用java网络编程中的TCP方式上传文本文件及出现的小问题

    自己今天刚学java网络编程中的TCP传输,要用TCP传输文件时,自己也是遇到了一些问题,抽空把它整理了一下,供自己以后参考使用. 首先在这个程序中,我用一个客户端,一个服务端,从客户端上传一个文本文 ...

  9. golang中的RPC开发-2

    RPC简介 远程过程调用(Remote Procedure Call,RPC)是一个计算机通信协议 该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程 如果 ...

随机推荐

  1. [源码解析] PyTorch 分布式之弹性训练(3)---代理

    [源码解析] PyTorch 分布式之弹性训练(3)---代理 目录 [源码解析] PyTorch 分布式之弹性训练(3)---代理 0x00 摘要 0x01 总体背景 1.1 功能分离 1.2 Re ...

  2. 【LeetCode】188. Best Time to Buy and Sell Stock IV 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  3. kafka2.x常用命令笔记(一)创建topic,查看topic列表、分区、副本详情,删除topic,测试topic发送与消费

    接触kafka开发已经两年多,也看过关于kafka的一些书,但一直没有怎么对它做总结,借着最近正好在看<Apache Kafka实战>一书,同时自己又搭建了三台kafka服务器,正好可以做 ...

  4. [算法笔记-题解]问题 D: 习题4-4 三个整数求最大值

    问题 D: 习题4-4 三个整数求最大值 [命题人 : 外部导入] 时间限制 : 1.000 sec 内存限制 : 12 MB 题目描述 有3个整数a, b, c,由键盘输入,输出其中最大的数. 输入 ...

  5. <学习opencv>绘画和注释

    /*=========================================================================*/ // 绘画 和 注释 /*========= ...

  6. Java程序设计基础笔记 • 【第5章 循环结构】

    全部章节   >>>> 本章目录 5.1 while循环结构 5.1.1 循环简介 5.1.2 while循环 5.1.3 while循环的使用 5.1.4 while循环的注 ...

  7. MySQL存储过程入门基础

    创建存储过程无参语法: delimiter // create procedure 函数名() begin 业务逻辑 end // call 函数名() 通过函数名调用存储过程 创建存储过程有参与法: ...

  8. linux中vim编辑器的翻页命令

    Linux jdk查看文件的最后一行         输入$回车 查看文件的第一行          输入0或者1回车 向前翻页                 Ctrl + f     f为forw ...

  9. centos7.5上安装go1.13.4

    一.安装 1.下载go1.13.4.linux-amd64.tar.gz 先进入官网https://golang.google.cn/ 再 https://golang.google.cn/doc/i ...

  10. java 代理模式 总结

    1.前言 最近舍友去面试遇到了关于java代理模式的问题. 我虽然知道怎么使用,但是没有做过正经的总结,因此有了这篇随笔,好好总结一下三大代理模式底层原理. 事实上,在开发项目的时候,基本用不上代理, ...