tcp-server.go
// 收到什麼發回去什麼
package main
import (
"fmt"
"log"
"net"
)
func main() {
// 1.建立監聽,綁定端口
tcp_server,err :=net.Listen("tcp",":8888")
if err != nil {
log.Panic("Failed to Listen",err)
}
// 4.收尾工作
defer tcp_server.Close()
// 2.等待新連接 併發
for {
conn,err :=tcp_server.Accept() //阻塞等待
if err != nil {
fmt.Println("Failed to Accept",err) // 這裏不能終止服務,提示就可以
continue
}
// 3.用新連接通信
go cli_conn(conn)
}
}
// 處理消息的函數
func cli_conn(conn net.Conn) {
defer conn.Close()
fmt.Println("localaddr:",conn.LocalAddr())
fmt.Println("localaddr:",conn.RemoteAddr())
//循環收發消息
buf := make([]byte,256)
for {
// 獲取消息
n,err := conn.Read(buf) // 數據存在buf中,n是讀的數據大小
if err != nil {
fmt.Println("Failed to Read",err)
break
}
// 返回消息
fmt.Print("Send Response:",string(buf[:n]))
conn.Write(buf[:n])
}
}
客戶端
# yum install nc
nc ip port