zoukankan      html  css  js  c++  java
  • 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
    		}
    	}
    }
    

      

  • 相关阅读:
    谷歌浏览器调试
    建立标准编码规则(五)-工程结构
    Ruby页面,循环赋值方法(类似java EL表达式赋值)
    ruby--Hash方法汇总
    ant design环境搭建过程中遇到的问题--Windows-dva-cli
    Linux下Nodejs安装(完整详细)
    linux chmod命令使用
    EL表达式获取日期时间类型后格式化的问题
    百度网盘视频资源
    Eclipse插件:mybatis generator的使用步骤
  • 原文地址:https://www.cnblogs.com/yunweiqiang/p/12727600.html
Copyright © 2011-2022 走看看