Server 端
要点
1、net.Listen() 监听端口
2、listen.Accept() 间裂socket 连接
3、conn.Read() 循环读取数据
package main
import (
"fmt"
"net"
)
func process(conn net.Conn){
defer conn.Close()
for {
var buf [128]byte
n ,err := conn.Read(buf[:])
if err != nil {
fmt.Println("Read from tcp server failed,err:",err)
break
}
data := string(buf[:n])
fmt.Printf("Recived from client,data:%s\n",data)
}
}
func main() {
// 监听TCP 服务端口
listener,err := net.Listen("tcp","0.0.0.0:9090")
if err != nil {
fmt.Println("Listen tcp server failed,err:",err)
return
}
for{
// 建立socket连接
conn,err := listener.Accept()
if err != nil {
fmt.Println("Listen.Accept failed,err:",err)
continue
}
// 业务处理逻辑
go process(conn)
}
}
client端
要点
1、net.Dial() 建立连接
2、bufio.NewReader(os.Stdin) 从标准输出流获取内容
3、reader.ReadString() 循环读取数据,直到遇到换行符
4、遇到字符串“Q”终止连接
5、conn.Write() 给服务器响应信息
package main
import (
"bufio"
"fmt"
"net"
"os"
"strings"
)
func main() {
// 连接服务器
conn,err := net.Dial("tcp","127.0.0.1:9090")
if err != nil {
fmt.Println("Connect to TCP server failed ,err:",err)
return
}
// 读取命令行输入
inputReader := bufio.NewReader(os.Stdin)
// 一直读取直到遇到换行符
for {
input,err := inputReader.ReadString('\n')
if err != nil {
fmt.Println("Read from console failed,err:",err)
return
}
// 读取到字符"Q"退出
str := strings.TrimSpace(input)
if str == "Q"{
break
}
// 响应服务端信息
_,err = conn.Write([]byte(input))
if err != nil{
fmt.Println("Write failed,err:",err)
break
}
}
}