当前位置:   article > 正文

Golang 实现简单的TCP通讯_golang 简单case:单连接,双向传输少量数据

golang 简单case:单连接,双向传输少量数据

Server端:利用net包创建服务器,go实现多线程监听,可同时处理多个client的连接

package main

import (
    "log"
    "net"
    "os"
)

func recvMessage(client net.Conn) error {
    var message []byte
    message = make([]byte, 1024)

    var out string

    for {
        len, _ := client.Read(message)

        if len > 0 {
            out = string(message)
            log.Println(out)

            for i :=0; i < len; i++ {
              message[i] = 0
            }
        }
       }
    return nil
}

func main() {
    server, err := net.Listen("tcp", "localhost:8500")
    if err != nil {
        log.Fatal("start server failed!\n")
        os.Exit(1)
    }
    defer server.Close()

    log.Println("server is running...")
    for {
        client, err := server.Accept()
        if err != nil {
            log.Fatal("Accept error\n")
            continue
        }

        log.Println("the client is connectted...")
        go recvMessage(client)
    }
}
 

 

----------------

Client:连接服务器,发送消息

package main

import(
  "log"
  "net"
  "fmt"
  "time"
  "bufio"
  "os"
)

func main() {
   BEG: client, err := net.Dial("tcp", "localhost:8500")
   if err != nil {
    log.Println("create client error...")
    time.Sleep(2*time.Second)
    goto BEG
  }

  client.Write([]byte("this is huangq test"))

  fmt.Println("Please input message to send to server(End with nil)!!!")
  var mm []byte
  mm = make([]byte, 1024)

  G1: Scan(&mm)

  client.Write(mm)
  length := len(mm)

  if length != 0 {
    for length > 0 {
      length--
      mm[length] = 0
    }
    goto G1
  }

  defer client.Close()
}

//输入的字符串中可包含空格

func Scan(s *[]byte) { 
  reader := bufio.NewReader(os.Stdin)
  data, _, _ := reader.ReadLine()
  *s = data
}
 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/753945
推荐阅读
相关标签
  

闽ICP备14008679号