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. Vue-Router(一)

    Vue-Router(一) 简介 vue-router是Vuejs的官方推荐路由,让用 Vue.js 构建单页应用变得非常容易.目前Vue路由最新的版本是4.x版本. vue-router是基于路由和 ...

  2. UEditor富文本判断是否输入内容

    <textarea name="CONTENT" id="CONTENT" maxlength="4000" style=" ...

  3. 【LeetCode】919. Complete Binary Tree Inserter 解题报告(Python & C++)

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

  4. MySQL与Oracle 差异比较之二函数

    函数 编号 类别 ORACLE MYSQL 注释 1 数字函数 round(1.23456,4) round(1.23456,4) 一样:ORACLE:select round(1.23456,4) ...

  5. [OpenCV]基于特征匹配的实时平面目标检测算法

    一直想基于传统图像匹配方式做一个融合Demo,也算是对上个阶段学习的一个总结. 由此,便采购了一个摄像头,在此基础上做了实时检测平面目标的特征匹配算法. 代码如下: # coding: utf-8 ' ...

  6. Deepin20系统安装Nvidia驱动

    Deepin20系统安装Nvidia驱动 系统设备配置信息如下: 电脑型号:华硕天选air[ASUS-FX516P] 显卡型号:RTX 3070 移动版独显 处理器型号: 11th Gen Intel ...

  7. [opencv]调用鼠标事件执行grabcut算法实现阈值分割

    #include<iostream> #include <opencv2/opencv.hpp> #include <math.h> using namespace ...

  8. Capstone CS5266替代AG9311 Type-C转HDMI带PD3.0+USB3.0拓展坞方案

    Capstone CS5266替代AG9311   Type-C转HDMI带PD3.0+USB3.0拓展坞方案CS5266是 Capstone 最新推出的一款用于USB TYPE-C端口的高度集成.高 ...

  9. MySQL数据库报错 > 1366 - Incorrect string value: ‘\xE6\xB1\x9F\xE6\x96\x87‘ for column ‘Teacher‘ at row 1

    数据库报错这个多半是数据库在创建的时候没有选择字符编码,导致输入中文的时候出现报错. > 1366 - Incorrect string value: '\xE6\xB1\x9F\xE6\x96 ...

  10. Java Web程序设计笔记 • 【目录】

    章节 内容 实践练习 Java Web程序设计作业目录(作业笔记) 第1章 Java Web程序设计笔记 • [第1章 Web应用程序] 第2章 Java Web程序设计笔记 • [第2章 JSP基础 ...