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)是一个计算机通信协议 该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程 如果 ...
随机推荐
- Vue-Router(一)
Vue-Router(一) 简介 vue-router是Vuejs的官方推荐路由,让用 Vue.js 构建单页应用变得非常容易.目前Vue路由最新的版本是4.x版本. vue-router是基于路由和 ...
- UEditor富文本判断是否输入内容
<textarea name="CONTENT" id="CONTENT" maxlength="4000" style=" ...
- 【LeetCode】919. Complete Binary Tree Inserter 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址: https://leetcode. ...
- MySQL与Oracle 差异比较之二函数
函数 编号 类别 ORACLE MYSQL 注释 1 数字函数 round(1.23456,4) round(1.23456,4) 一样:ORACLE:select round(1.23456,4) ...
- [OpenCV]基于特征匹配的实时平面目标检测算法
一直想基于传统图像匹配方式做一个融合Demo,也算是对上个阶段学习的一个总结. 由此,便采购了一个摄像头,在此基础上做了实时检测平面目标的特征匹配算法. 代码如下: # coding: utf-8 ' ...
- Deepin20系统安装Nvidia驱动
Deepin20系统安装Nvidia驱动 系统设备配置信息如下: 电脑型号:华硕天选air[ASUS-FX516P] 显卡型号:RTX 3070 移动版独显 处理器型号: 11th Gen Intel ...
- [opencv]调用鼠标事件执行grabcut算法实现阈值分割
#include<iostream> #include <opencv2/opencv.hpp> #include <math.h> using namespace ...
- 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端口的高度集成.高 ...
- 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 ...
- Java Web程序设计笔记 • 【目录】
章节 内容 实践练习 Java Web程序设计作业目录(作业笔记) 第1章 Java Web程序设计笔记 • [第1章 Web应用程序] 第2章 Java Web程序设计笔记 • [第2章 JSP基础 ...