一、服务端
package main
import (
"fmt"
"net"
"time"
)
func main() {
TCPListener, err := net.Listen("tcp", ":8004")
//tcpAddr, err := net.ResolveTCPAddr("tcp", ":8004")
//if err!=nil{
// fmt.Println("ResolveTCPAddr err:",err)
//}
//
//TCPListener, err := net.ListenTCP("tcp", tcpAddr)
if err != nil {
fmt.Println("tcp dial err:", err)
}
defer TCPListener.Close()
fmt.Println("tcpConn ready!")
for {
tcpConn, err := TCPListener.Accept()
if err != nil {
fmt.Println("TCPAccept err:", err)
}
fmt.Println(tcpConn)
go tcpPipe(tcpConn)
}
}
func tcpPipe(tcpConn net.Conn) {
ipAddr := tcpConn.RemoteAddr().String()
//defer func() {
// fmt.Println("Disconnected!", ipAddr)
// tcpConn.Close()
//}()
//
//reader := bufio.NewReader(tcpConn)
i := 0
//for {
// msg, err := reader.ReadString('\n')
// if err != nil || err == io.EOF {
// fmt.Println(err)
// }
//
// fmt.Println("server读取消息:", msg)
// //time.Sleep(time.Nanosecond * 3)
// msgs := time.Now().String() + ipAddr + "say hello"
//
// tcpConn.Write([]byte(msgs))
// //i++
// //if i > 10 {
// // break
// //}
//
//}
//读
buf := make([]byte, 4096)
for{
n, err := tcpConn.Read(buf)
if err != nil {
fmt.Println("ReadFromUDP err:", err)
return
}
fmt.Printf("读取%v的数据为%s\n", ipAddr, buf[:n])
//写
daytime := time.Now().String()
_, err = tcpConn.Write([]byte(daytime))
if err != nil {
fmt.Println("WriteToUDP err:", err)
return
}
}
}
二、客户端
package main
import (
"bufio"
"fmt"
"net"
"os"
)
func main() {
tcpConn, err := net.Dial("tcp", ":8004")
if err != nil {
fmt.Println("tcp dial err:", err)
}
defer tcpConn.Close()
fmt.Println("tcpCli ready")
onMessageReceived(tcpConn)
}
func onMessageReceived(conn net.Conn) {
reader := bufio.NewReader(os.Stdin)
buf := make([]byte, 4096)
for {
line, _, _ := reader.ReadLine()
_, err := conn.Write(line)
if err != nil {
fmt.Println(err)
}
n, err := conn.Read(buf)
fmt.Println(string(buf[:n]))
}
//reader := bufio.NewReader(conn)
//b := []byte(conn.LocalAddr().String() + " Say hello to Server... \n")
//conn.Write(b)
//for {
// msg, err := reader.ReadString('\n')
// fmt.Println("ReadString")
// fmt.Println(msg)
//
// if err != nil || err == io.EOF {
// fmt.Println(err)
// break
// }
// time.Sleep(time.Nanosecond * 2)
//
// fmt.Println("writing...")
//
// b := []byte(conn.LocalAddr().String() + " write data to Server... \n")
// _, err = conn.Write(b)
//
// if err != nil {
// fmt.Println(err)
// break
// }
//}
//buf:=make([]byte,4096)
//for{
// n, err := tcpConn.Read(buf)
// if err!=nil||err==io.EOF{
// fmt.Println("tcp read err:",err)
// break
// }
// fmt.Println("cli读取数据为:",string(buf[:n]))
//}
}