tcp服务器和客户端通信

Tcp服务器

package main

import (
“fmt”
“net”
“strings”
)

func HandConnect(conn net.Conn ) {
//延时关闭调用
defer conn.Close()
//获取客户端的网络地址
addr := conn.RemoteAddr().String()
fmt.Println(“addr=”, addr)
fmt.Println(“地址连接成功(address connect successful)”)
//创建一个循环可以使多用户调用
for {

  //创建一个缓冲切片
  buf := make([]byte, 2048)
  //创建对缓冲的读取
  n, err := conn.Read(buf)
  if err != nil {
     fmt.Printf("err=%+v\n", err)
     return
  }
  fmt.Printf("[%+v]:%+v\n", addr, string(buf[:n]))
  //使用exit退出nc,但是注意在此过程中缓冲切片中有空格字符,所以长度-1
  if "exit"==string(buf[:n-2]){
     fmt.Println(addr,"连接已退出")
     return
  }

  //将其小写转化为大写再返回给客户端
  conn.Write([]byte(strings.ToUpper(string(buf[:n]))))
  //fmt.Println("buf=",strings.ToUpper(string(buf[:n])))

}
}

func main() {
//监听
Listener,err:=net.Listen(“tcp”,“127.0.0.1:8888”)
if err != nil {
fmt.Printf(“err=%+v\n”,err)
return
}
//调用完毕关闭
defer Listener.Close()
//设置多用户连接
for{
conn,err1:=Listener.Accept()
if err1 != nil {
fmt.Printf(“err1=%+v\n”,err1)
return
}
//建立一个协程函数
go HandConnect(conn)

}
}
Tcp客户端

package main

import (
“fmt”
“net”
“os”
)

func main() {
//网络的连接访问
conn,err:=net.Dial(“tcp”,“127.0.0.1:8888”)
if err != nil {
fmt.Printf(“err=%+v\n”,err)
return
}
defer conn.Close()
//定义一个匿名函数,接收服务器内容,开启新任务
go func() {
//键盘写入内容os.stdin,定义一个切片
str:= make([]byte, 1024)
for {
n, err := os.Stdin.Read(str)
if err != nil {
fmt.Printf(“err=%+v\n”, err)
return
}
//println(str[:n])
//输入的内容发送到服务器
conn.Write(str[:n])
}
}()

//进行读取服务器,首先定义一个缓冲切片
buf := make([]byte, 1024)
for {
n, err := conn.Read(buf)
if err != nil {
fmt.Printf(“err=%+v\n”, err)
return
}
//打印出缓冲内容
fmt.Println(string(buf[:n]))
}
}

扫描二维码关注公众号,回复: 11402660 查看本文章

猜你喜欢

转载自blog.csdn.net/C540743204/article/details/107463373