说完tcp和udp的区别,就要开始讲讲如何用go进行连接了。
话不多说,上代码。
package main
import (
"net"
"fmt"
"io"
)
func main() {
// 创建 监听器 参1 为 tcp或udp 必须小写 参2则是地址+端口号
list,err := net.Listen("tcp","127.0.0.1:8888")
if err != nil {
fmt.Println("Listen err:",err)
}
defer list.Close() // 创建后记住关闭
for {
//与客户端建立socket连接
// 死循环是为了于多个用户进行连接通信
conn,err := list.Accept()
if err != nil {
fmt.Println("Accept err:", err)
continue
}
go con(conn) //连接后进入子go程 负责与用户进行交互 不阻塞其他用户
}
}
func con(conn net.Conn){
defer conn.Close()
for{
bytes := make([]byte,4096)
n,err := conn.Read(bytes) //读数据
if n == 0 {
fmt.Println(conn.RemoteAddr().String())
return
}
if err != nil && err != io.EOF {
fmt.Println("read err:",err)
return
}
str := Str(string(bytes[:n]))
conn.Write([]byte(str)) //写数据
}
}
func Str(str string) string { //字母大小写转换
fmt.Println(str)
str1 := []rune(str)
for i := 0; i < len(str1); i++ {
if str1[i] >= 65 && str1[i] <= 91 {
str1[i] += 32
} else if str1[i] >= 97 && str1[i] <= 123 {
str1[i] -= 32
}
}
return string(str1)
}
网友评论