AI智能
改变未来

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,但是注意在此过程中缓冲切片中有空格字符,所以长度-1if \"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]))
}
}

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » tcp服务器和客户端通信