实现简单的tcp服务
package main import (
"fmt"
"net"
) func main() { fmt.Println("服务器开始监听..") // Listen创建网络监听
listen, err := net.Listen("tcp", "127.0.0.1:9999") defer listen.Close() if err != nil {
fmt.Println("listen err=,", err)
return
} for {
fmt.Println("等待客户端连接....") // Accept等待并返回下一个连接到该接口的连接,返回一个通用的网络链接
conn, err := listen.Accept() if err != nil {
fmt.Println("accpet error: ", err)
} //conn.RemoteAddr()返回远端网络地址 String():返回字符串格式的地址
fmt.Println("accpet connect: ", conn.RemoteAddr().String())
}
}
是客户端连接服务端,实现以下功能
1. 编写一个客户端端程序,能链接到服务器端监听的端口
2. 客户端可以发送单行数据,然后退出
3. 能通过终端输入数据(输入一行发送一行),并发送给服务器端。
4.在终端输入exit,表示退出程序.
package main import (
"fmt"
"net"
) func procs(conn net.Conn) {
defer conn.Close() for {
byt := make([]byte, 512) fmt.Printf("wait %s send data\n", conn.RemoteAddr().String())
len, err := conn.Read(byt) //从conn中读取byte,会如果不发数据会阻塞 if err != nil {
fmt.Println("server err:", err)
return
} fmt.Println(string(byt[:len]))
}
} func main() { fmt.Println("服务器开始监听..") // Listen创建网络监听
listen, err := net.Listen("tcp", "127.0.0.1:9999") defer listen.Close() if err != nil {
fmt.Println("listen err=", err)
return
} for {
fmt.Println("等待客户端连接....") // Accept等待并返回下一个连接到该接口的连接,返回一个通用的网络链接
conn, err := listen.Accept() if err != nil {
fmt.Println("accpet error: ", err)
} //conn.RemoteAddr()返回远端网络地址 String():返回字符串格式的地址
fmt.Println("accpet connect: ", conn.RemoteAddr().String()) go procs(conn)
}
}
package main import (
"bufio"
"fmt"
"net"
"os"
) func main() { // 连接服务端
conn, err := net.Dial("tcp", "127.0.0.1:9999") if err != nil {
fmt.Println("conn err: ", err)
}
fmt.Println("成功:", conn) //向服务器发送数据。 reader := bufio.NewReader(os.Stdin) // 返回第一次遇到\n的所有数据,byte
str, err := reader.ReadString('\n') if err != nil {
fmt.Println("reader fail: ", err)
} len, err := conn.Write([]byte(str)) if err != nil {
fmt.Println("send data fail: ", err)
}
fmt.Printf("客户端发送了%d自己后退出", len)
}