一. server
package main
import (
"fmt"
"net"
"os"
"time"
)
func main() {
// 设置TCP地址
service := "127.0.0.1:51000"
tcpAddr, err := net.ResolveTCPAddr("tcp4", service)
checkError(err)
// 设置监听
listener, err := net.ListenTCP("tcp", tcpAddr)
checkError(err)
// 接受信息
for {
conn, err := listener.Accept()
if err != nil {
continue
}
// go handleClient(conn)
handleClient(conn)
}
}
func handleClient(conn net.Conn) {
// 设置过期时间,过了时间断开连接
conn.SetReadDeadline(time.Now().Add(2 * time.Minute))
go getMess(conn)
go sendMess(conn)
}
func sendMess(conn net.Conn) {
for {
var s1 string
fmt.Scan(&s1)
fmt.Printf("我说:")
fmt.Println(s1)
conn.Write([]byte(s1))
}
}
func getMess(conn net.Conn) {
data := make([]byte, 128)
for {
read_len, err := conn.Read(data)
checkError(err)
if read_len == 0 {
continue
}
fmt.Printf("对面说:")
fmt.Println(string(data))
data = make([]byte, 128)
}
}
func checkError(err error) {
if err != nil {
fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error())
os.Exit(1)
}
}
二. client
package main
import (
"fmt"
"net"
"os"
)
func main() {
// 设置TCP地址
tcpAddr, err := net.ResolveTCPAddr("tcp4", "127.0.0.1:51000")
checkError(err)
// 连接远程服务器
conn, err := net.DialTCP("tcp", nil, tcpAddr)
checkError(err)
_, err = conn.Write([]byte("hi"))
checkError(err)
go sendMess(conn)
getMess(conn)
}
func getMess(conn net.Conn) {
data := make([]byte, 128)
for {
_, err := conn.Read(data)
checkError(err)
fmt.Printf("对面:")
fmt.Println(string(data))
data = make([]byte, 128)
}
}
func sendMess(conn net.Conn) {
for {
var s1 string
fmt.Scan(&s1)
conn.Write([]byte(s1))
fmt.Printf("我说:")
fmt.Println(s1)
}
}
func checkError(err error) {
if err != nil {
fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error())
os.Exit(-1)
}
}