首页 > 编程语言 >golang网络编程

golang网络编程

时间:2023-08-11 22:55:43浏览次数:34  
标签:err fmt 编程 网络 TCP golang Println net conn

1 简介

  • Go语言的网络编程主要使用 net 包来实现。该包提供了一组基本的网络功能,包括 TCP 和 UDP 套接字、IP 地址和端口号的处理、以及一些高级特性,如非阻塞 I/O 和 HTTP 客户端库。

  • 本文简单介绍一下如何使用net包进行TCP通信

2 TCP通信

TCP服务端

处理流程:

  1. 监听端口
  2. 接收客户端请求建立链接
  3. 创建goroutine处理链接。

示例1:

package main

import (
	"fmt"
	"net"
)

// TCP server端

func main() {
	// 1.本地端口启动服务
	listener, err := net.Listen("tcp", "127.0.0.1:30000")
	if err != nil {
		fmt.Println("listen failed, err:", err)
		return
	}

	for {
		// 2.建立连接
		conn, err := listener.Accept()
		if err != nil {
			fmt.Println("accept failed, err:", err)
			continue
		}

		// 3.与client端通信
		go processConn(conn)
	}
	listener.Close()
}

// 与client端通信
func processConn(conn net.Conn) {
	tmp := make([]byte, 1024)
	for {
		n, err := conn.Read(tmp)
		if err != nil {
			fmt.Println("read from client failed, err:", err)
			break
		}
		recvStr := string(tmp[:n])
		fmt.Println(recvStr)
	}
	err := conn.Close()
	if err != nil {
		fmt.Println("close failed, err", err)
	}
}

TCP客户端

处理流程:

  1. 建立与服务端的链接
  2. 进行数据收发
package main

import (
	"bufio"
	"fmt"
	"net"
	"os"
)

// TCP client端

func main() {
	// 1.与server建立连接
	conn, err := net.Dial("tcp", "127.0.0.1:8080")
	if err != nil {
		fmt.Println("dial failed, err:", err)
	}

	// 2.发送数据
	for {
		/*
			使用bufio包中的ReadString()函数来代替fmt.Scanln()函数。
			这个函数可以读取一行字符串,包括空格、制表符和换行符等空白字符
		*/
		fmt.Print("请输入发送内容:")
		reader := bufio.NewReader(os.Stdin)
		msg, _ := reader.ReadString('\n')
		if msg == "quit" {
			break
		}
		conn.Write([]byte(msg))
	}

	conn.Close()
}

标签:err,fmt,编程,网络,TCP,golang,Println,net,conn
From: https://www.cnblogs.com/xiufanivan/p/17624086.html

相关文章

  • golang 构造函数的应用
    在Go语言中,没有类似于传统面向对象编程语言中的构造函数的概念。然而,你可以使用初始化函数来达到类似的效果。在Go中,结构体(struct)是一种用于封装一组相关字段的数据类型。你可以为结构体定义一个初始化函数,该函数在创建结构体实例时自动调用,用于设置字段的初始值。这个初始化函数......
  • R语言中贝叶斯网络(BN)、动态贝叶斯网络、线性模型分析错颌畸形数据|附代码数据
    最近我们被客户要求撰写关于贝叶斯网络的研究报告,包括一些图形和统计输出。贝叶斯网络(BN)是一种基于有向无环图的概率模型,它描述了一组变量及其相互之间的条件依赖性。它是一个图形模型,我们可以很容易地检查变量的条件依赖性和它们在图中的方向在这篇文章中,我将简要地学习如何用R来......
  • 拓端tecdat|用R语言编程代写制作交互式图表和地图
    用R语言制作交互式图表和地图可以直接从R/RStudio制作在线交互式图表和地图。 配置启动RStudio,创建一个新的RScript,然后将工作目录设置为下载的数据文件夹。 使ggplot2图表成为交互式Plotly图表制作交互式点线图以下代码将安装并加载程序包(该程序还将......
  • 拓端tecdat|使用GIS编程代写制作静态地图和处理地理数据
    使用GIS制作静态地图和处理地理数据QGIS简介GQIS是领先的免费开放源地理信息系统(GIS)应用程序。它能够进行复杂的地理数据处理和分析,还可以用于设计发布质量的数据驱动地图。 启动QGIS,应该看到类似以下的屏幕:  如果您的屏幕看起来与众不同,请View>Panels......
  • 绝了!学编程的还有不知道的吗?这个Java开发工具免费了!
    智能开发正在迅速走红!随着ChatGPT的广泛应用,智能开发越来越受到关注。然而,实际上,在数年前开始尝试智能开发的探索。自从2014年ForresterResearch提出"低代码"的概念以来,低代码平台的发展非常迅速。除了OutSystems和Mendix等低代码厂商之外,微软、谷歌等大型公司也纷纷开始着手低代......
  • 大模型时代的程序员:不会用AIGC编程,未来5年将被淘汰?
    作者|郭炜策划|凌敏前言下面是一段利用Co-Pilot辅助开发的小视频,这是ApacheSeaTunnel开发者日常开发流程中的一小部分。如果你还没有用过Co-Pilot、ChatGPT或者私有化大模型帮助你辅助开发的话,未来的5年,你可能很快就要被行业所淘汰。因为这些善于使用AIGC辅助编......
  • 【Sword系列】第七届全国残疾人职业技能大赛样题-网络安全-被黑了,求密码
    前言摩尔斯电码(Morsecode)也被称作摩斯密码,是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号。它发明于1837年,是一种早期的数字化通信形式。不同于现代化的数字通讯,摩尔斯电码只使用零和一两种状态的二进制代码,它的代码包括五种:短促的点信号“・......
  • golang之协程+chan通道
     [管道]分为有缓冲和无缓冲两种无缓冲: 1)接受者与发送者必然存在于两个协程,否则会造成互相等待死锁的情况顺序执行多协程:varch1=make(chanint)varstopFlag=make(chanbool)//保证两个协程顺序执行gofunc(){fmt.Println("g1")......
  • k8s 网络模型
    容器网络通信模式在Host模式中,各容器共享宿主机的根网络名称空间,它们使用同一个接口设备和网络协议栈,因此,用户必须精心管理共享同一网络端口空间容器的应用与宿主机应用,以避免端口冲突。Bridge模式对host模式进行了一定程度的改进,在该模式中,容器从一个或多个专用网络(地址池)中获......
  • 8.11-下午-电极02-03eg(线切割)编程雕不了用电极 电极做不出来的 用线切割
      ......