golang中的tcp编程
1. tcp server
package main
import (
"bufio"
"fmt"
"net"
)
func main() {
// 1. 监听端口
listener, err := net.Listen("tcp", "127.0.0.1:8080")
if err != nil {
fmt.Println("listen fail err", err)
return
}
defer listener.Close()
for {
// 2. 接收客户端请求建立链接
conn, err := listener.Accept()
if err != nil {
fmt.Println("accept fail err", err)
continue
}
// 3. 创建goroutine处理链接
go process(conn)
}
}
func process(conn net.Conn) {
defer fmt.Println("conn链接关闭了")
defer conn.Close() // 关闭链接
reader := bufio.NewReader(conn)
for {
var buf [4096]byte
n, err := reader.Read(buf[:]) // 读取数据
if err != nil {
break
}
recvStr := string(buf[:n])
fmt.Println("收到Client发来的数据:", recvStr)
recvStr = "serer" + recvStr
conn.Write([]byte(recvStr))
}
}
2. tcp client
package main
import (
"bufio"
"fmt"
"net"
"os"
"strings"
)
func main() {
// 建立与服务器的链接
conn, err := net.Dial("tcp", "127.0.0.1:8080")
if err != nil {
fmt.Println("Dial fail err", err)
return
}
// 关闭链接
defer conn.Close()
inputReader := bufio.NewReader(os.Stdin)
// 进行数据的收发
for {
input, _ := inputReader.ReadString('\n')
inputInfo := strings.Trim(input, "\r\n")
if strings.ToUpper(inputInfo) == "Q" { // 如果用户输入的是q/Q就退出
return
}
// 发送数据
_, err := conn.Write([]byte(inputInfo))
if err != nil {
fmt.Println("Write fail err", err)
return
}
// 接收数据
buf := [4096]byte{}
n, err := conn.Read(buf[:])
if err != nil {
fmt.Println("Read fail err", err)
return
}
fmt.Println("收到server发来的数据:", string(buf[:n]))
}
}

浙公网安备 33010602011771号