Golang 实现简单的TCP通讯

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
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值