zoukankan      html  css  js  c++  java
  • go语言之TCP编程

    服务端

    package main
    
    import (
    	"fmt"
    	"net"
    )
    
    func process(conn net.Conn){
    	defer conn.Close()
    	for{
    		buf:=make([]byte,1024)
    		fmt.Printf("服务器在等待客户端%s发送消息",conn.RemoteAddr().String())
    		n,err:=conn.Read(buf)//从conn读取数据
    		if err!=nil{
    			fmt.Printf("客户端%s退出。。。",conn.RemoteAddr().String())
    			return
    		}
    		fmt.Println(string(buf[:n]))
    	}
    }
    
    func main(){
    	fmt.Println("服务器开始监听")
    	listen,err:=net.Listen("tcp","0.0.0.0:7077")
    	if err!=nil{
    		fmt.Println("Listen出错!",err)
    		return
    	}
    	defer listen.Close()
    
    	//循环等待客户端来连接
    	for{
    		fmt.Println("等待客户端来连接")
    		conn,err:=listen.Accept()
    		if err!=nil{
    			fmt.Println("Accept出错",err)
    		}else{
    			fmt.Printf("Accept() suc con=%v 客户端 ip=%v
    ", conn, conn.RemoteAddr().String())
    		}
    		//这里准备一个协程,为客户端服务
    		go process(conn)
    	}
    }
    

    客户端

    package main
    
    import (
    	"bufio"
    	"fmt"
    	"net"
    	"os"
    )
    
    func main(){
    	conn,err:=net.Dial("tcp","127.0.0.1:7077")
    	if err!=nil{
    		fmt.Println("Dial出错",err)
    		return
    	}
    	//功能一:客户端可以发送单行数据,然后就退出
    	reader := bufio.NewReader(os.Stdin) //os.Stdin 代表
    	//从终端读取一行用户输入,并准备发送给服务器
    	line, err := reader.ReadString('
    ')
    	if err != nil {
    		fmt.Println("readString err=", err)
    	}
    	//再将 line 发送给 服务器
    	n, err := conn.Write([]byte(line))
    	if err != nil {
    		fmt.Println("conn.Write err=", err)
    	}
    	fmt.Printf("客户端发送了 %d 字节的数据,并退出", n)
    
    }
    

      

  • 相关阅读:
    vue下使用echarts折线图及其横坐标拖拽功能
    vue下登录页背景图上下空白处自适应等高
    前端面试总结下~
    在C#中使用科大讯飞Web API进行语音合成
    C# Socket 发送&接收&返回
    AutoMapper在C#中的有趣应用
    RabbitMQ 在 C# 中简单应用
    .Net Core 读取配置文件
    C# / .Net Core 访问MongoDb库
    C#发送GET与POST请求
  • 原文地址:https://www.cnblogs.com/mango1997/p/15530531.html
Copyright © 2011-2022 走看看