Go语言网络通信---多用户连续通信的TCP编程

server端:

package main

import (
	"fmt"
	"net"
)

func main() {
	//建立监听
	listener, err := net.Listen("tcp", "localhost:8080")
	if err != nil{
		fmt.Println("建立tcp监听失败,err=",err)
		return
	}

	defer func() {
		listener.Close()
		fmt.Println("服务器已关闭")
	}()

	fmt.Println("正在监听客户请求")

	for {
		//循环接入一个客户端(获得专线连接Conn)
		conn, _ := listener.Accept()
		fmt.Println("成功接入客户端:",conn.RemoteAddr())

		//将接入的客户端丢到并发协程中进行处理
		go func() {
			/*在一个独立的并发任务中与当前客户端IO*/
			for {
				//在专线连接中与特定的客户端IO
				buffer := make([]byte, 1024)
				n, _ := conn.Read(buffer)
				msg := string(buffer[:n])
				fmt.Printf("客户端%v:%s
",conn.RemoteAddr(),msg)

				//回复消息
				conn.Write([]byte("已阅消息:"+ msg))

				//判断客户端是否想离婚
				if msg == "exit"{
					//断开与客户端的链接
					conn.Close()
					break
				}

			}
		}()
	}

}

  client端:

package main

import (
	"fmt"
	"net"
)

func main() {
	//使用udp协议拨号,远程地址127.0.0.1:8080
	conn, _ := net.Dial("tcp", "127.0.0.1:8080")

	//程序退出前关闭连接,释放io资源
	defer func() {
		conn.Close()
		fmt.Println("客户端已退出")
	}()

	//创建接收消息的缓冲区
	buffer := make([]byte, 1024)
	//用户要发送的消息文本
	var userInput string
	for{
		//接收用户输入
		fmt.Print("大神请输入:")
		fmt.Scan(&userInput)
		//如果用户输入exit则退出

		//客户端发起交谈
		conn.Write([]byte(userInput))

		//接收服务端消息
		n, err := conn.Read(buffer)
		fmt.Println(err)
		fmt.Println("服务端:"+string(buffer[:n]))
		if userInput == "exit"{
			break
		}
	}
}

  

原文地址:https://www.cnblogs.com/yunweiqiang/p/12727600.html