首页 > 编程语言 >13、go的TCP网络编程

13、go的TCP网络编程

时间:2022-11-25 16:15:11浏览次数:45  
标签:13 err fmt TCP Println go 连接 conn 客户端

创建客户端

func main() {
	// 所需的网络编程全都在net包下
	conn, err := net.Dial("tcp", "127.0.0.1:8888")
	fmt.Println("客户端启动")
	if err != nil { // 连接失败
		fmt.Println("客户端连接失败:", err)
		return
	}
	fmt.Println("连接成功:", conn)
}

创建服务端

func main() {
	fmt.Println("服务端启动了")
	// 进行监听
	listen, err := net.Listen("tcp", "127.0.0.1:8888")
	if err != nil { // 监听失败
		fmt.Println("监听失败:", err)
		return
	}
	// 监听成功以后:
	// 等待客户端连接
	for {
		conn, err2 := listen.Accept()
		if err2 != nil { // 客户端等待失败
			fmt.Println("客户端等待失败:", err2)
		} else {
			// 连接成功
			fmt.Printf("等待连接成功:%v, 接收到的客户端信息:%v \n", conn, conn.RemoteAddr().String())
		}
	}
}

连接测试

先启动服务端:
image
再启动客户端:
image
客户端正常启动完成后,再回看服务端:
image
可以继续测试,再启动一次客户端:
image
回看服务端:可以看到一个新的连接
image

发送终端数据

服务端:

func process(conn net.Conn) {
	// 连接用完一定要关闭
	defer conn.Close()

	for true {
		// 创建一个切片,准备把读取的数据放入切片
		bytes := make([]byte, 1024)
		// 从conn连接中读取数据
		read, err := conn.Read(bytes)
		if err != nil {
			return
		}
		fmt.Println(string(bytes[0:read]))
	}
}
func main() {
	fmt.Println("服务端启动了")
	// 进行监听
	listen, err := net.Listen("tcp", "127.0.0.1:8888")
	if err != nil { // 监听失败
		fmt.Println("监听失败:", err)
		return
	}
	// 监听成功以后:
	// 等待客户端连接
	for {
		conn, err2 := listen.Accept()
		if err2 != nil { // 客户端等待失败
			fmt.Println("客户端等待失败:", err2)
		} else {
			// 连接成功
			fmt.Printf("等待连接成功:%v, 接收到的客户端信息:%v \n", conn, conn.RemoteAddr().String())
		}
		//准备个协程处理客户端服务的请求
		go process(conn)
	}
}

客户端:

func main() {
	// 所需的网络编程全都在net包下
	conn, err := net.Dial("tcp", "127.0.0.1:8888")
	fmt.Println("客户端启动")
	if err != nil { // 连接失败
		fmt.Println("客户端连接失败:", err)
		return
	}
	fmt.Println("连接成功:", conn)

	// 通过客户端发送单行数据,然后退出
	reader := bufio.NewReader(os.Stdin) //os.Stdin代表终端标准输入
	// 从终端读取一行用户输入的信息
	str, err := reader.ReadString('\n')
	if err != nil {
		fmt.Println("终端输入失败:", err)
	}
	// 成功,把str发给服务器
	w, err2 := conn.Write([]byte(str))
	if err2 != nil {
		fmt.Println("连接失败:", err2)
	}
	fmt.Printf("终端数据通过客户端发送成功,一共发送%d字节的数据", w)
}

启动服务端:
image
启动客户端并在终端输入发送的内容:
image
服务端可以接收到:
image

标签:13,err,fmt,TCP,Println,go,连接,conn,客户端
From: https://www.cnblogs.com/abiu/p/16408044.html

相关文章

  • 12、go的协程和管道
    协程概念又称微线程,纤程,协程是一种用户态的轻量级线程作用:在执行A函数时候,可以随时中断,去执行B函数,然后中断继续执行A函数(可以自动切换),这一切换过程并不是函数调用(没有调......
  • 11、go的文件操作
    文件创建一个测试文件代码测试:funcmain(){ //打开文件 file,err:=os.Open("E:/test/Test.txt") iferr!=nil{//err不为空,说明报错 fmt.Println("文件......
  • 10、go的面向对象
    结构体结构体的定义//定义结构体,老师的结构体,各个属性统一放入结构体管理typeTeacherstruct{ //变量名大写开头外界可以访问 Namestring Ageint Scho......
  • 9、go的map
    map引入funcmain(){ //定义map varamap[int]string //只声明map内存是没有分配空间的,必须通过make函数进行初始化 a=make(map[int]string,10)//如果不指......
  • 13基础元器件-缓冲器
    一、缓冲器的初步认识1、缓冲器的定义缓冲器是数字元件的其中一种,它对输入值不执行任何运算,其输出值和输入值一样,但它在计算机的设计中有着重要作用。有了缓冲器,就可以使......
  • Memcache,Redis,MongoDB(数据缓存系统)方案对比与分析
    摘要:一、问题:      数据库表数据量极大(千万条),要求让服务器更加快速地响应用户的需求。 二、解决方案:   1.通过高速服务器Cache......
  • MongoDB - 事务支持
    事务简介事务是数据库中处理的逻辑单元,每个事务中包括一个或多个数据库操作,既可以是读操作,也可以是写操作。ACID是一个“真正”事务所需要具备的一组属性集合,指的是原子......
  • centos 7 YUM 安装mongodb 3.4
    第一步查看是否存在Mongodb配置yum源切换到yum目录cd/etc/yum.repos.d/查看文件ls第二部不存在添加yum源创建文件touchmongodb-3.4.repo编辑该文件vimongodb-3.4.......
  • LeetCode 135.分发糖果
    LeetCode 135.分发糖果题目地址:​​https://leetcode-cn.com/problems/candy/​​题目描述:老师想给孩子们分发糖果,有N个孩子站成了一条直线,老师会根据每个孩子的表现,预......
  • Vmware13虚拟机在M1上无法连接网络的解决方法
    在M1上安装上mware13虚拟机,但是无法连接网络,怎么办?下面就给大家介绍一下vm虚拟机安装在M1上显示无法连接网络的解决办法。打开vm虚拟机,在左上角打开虚拟机-安装vmaretool......