Golang实现TCP服务器/客户端

筑梦攻城狮 · · 2318 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。


Server 端

要点

1、net.Listen() 监听端口

2、listen.Accept() 间裂socket 连接

3、conn.Read() 循环读取数据

package main

import (
   "fmt"
   "net"
)

func process(conn net.Conn){
   defer conn.Close()
   for {
      var buf [128]byte
      n ,err := conn.Read(buf[:])
      if err != nil {
         fmt.Println("Read from tcp server failed,err:",err)
         break
      }
      data := string(buf[:n])
      fmt.Printf("Recived from client,data:%s\n",data)
   }
}

func main() {
   // 监听TCP 服务端口
   listener,err := net.Listen("tcp","0.0.0.0:9090")
   if err != nil {
      fmt.Println("Listen tcp server failed,err:",err)
      return
   }

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

      // 业务处理逻辑
      go process(conn)
   }
}


client端

要点

1、net.Dial() 建立连接

2、bufio.NewReader(os.Stdin) 从标准输出流获取内容

3、reader.ReadString() 循环读取数据,直到遇到换行符

4、遇到字符串“Q”终止连接

5、conn.Write() 给服务器响应信息

package main

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

func main() {
   // 连接服务器
   conn,err := net.Dial("tcp","127.0.0.1:9090")
   if err != nil {
      fmt.Println("Connect to TCP server failed ,err:",err)
      return
   }

   // 读取命令行输入
   inputReader := bufio.NewReader(os.Stdin)

   // 一直读取直到遇到换行符
   for {
      input,err := inputReader.ReadString('\n')
      if err != nil {
         fmt.Println("Read from console failed,err:",err)
         return
      }

      // 读取到字符"Q"退出
      str := strings.TrimSpace(input)
      if str == "Q"{
         break
      }
      
      // 响应服务端信息
      _,err = conn.Write([]byte(input))
      if err != nil{
         fmt.Println("Write failed,err:",err)
         break
      }
   }
   
}



有疑问加站长微信联系(非本文作者)

本文来自:51CTO博客

感谢作者:筑梦攻城狮

查看原文:Golang实现TCP服务器/客户端

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2318 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传