实现简单的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) }