网络编程
tcp
1.tcp客户端服务端实现
server/server.go
package main import ( "fmt" "net" ) /* tcp客户端服务端实现 */ func process(conn net.Conn){ //这里我们循环接收客户端发送的消息 defer conn.Close() for{ //创建一个新的切片 buf:=make([]byte,1024) //conn.Read(buf) //1.等待客户端通过conn发送消息 //2.如果客户端没有write[发送],那么协程就阻塞在这里 fmt.Printf("服务器在等待客户端%s 发送消息\n",conn.RemoteAddr().String()) n,err:=conn.Read(buf)//从conn读取 if err!=nil{ fmt.Printf("客户端退出 err=%v",err) return } //3.显示客户端发送的内容,到服务器的终端 fmt.Print(string(buf[:n])) } } func main(){ fmt.Println("服务器开始监听。。") //net.Listen("tcp","0.0.0.0:8888") listen,err:=net.Listen("tcp","0.0.0.0:8888") if err!=nil{ fmt.Println("listen err=",err) return } defer listen.Close()//延时关闭listen //循环等待客户端连接 for{ //等待客户端连接 fmt.Println("等待客户端") conn,err:=listen.Accept() if err!=nil{ fmt.Println("Accept() en=",err) }else{ fmt.Printf("Accept() suc con=%v 客户端ip=%v\n",conn,conn.RemoteAddr().String()) } //这里准备一个协程,为客户端服务 go process(conn) } fmt.Printf("listen suc=%v\n",listen) }
client/client.go
package main import ( "bufio" "fmt" "net" "os" "strings" ) func main(){ conn,err:=net.Dial("tcp","192.168.1.107:8888") if err!=nil{ fmt.Println("client dial err=",err) return } //功能一:客户端可以发送单行数据,然后就退出 reader:=bufio.NewReader(os.Stdin)//os.Stdin 代表标准输入终端 for{ //从服务端读取一行用户输入,并准备发送给服务器 line,err:=reader.ReadString(\'\n\') if err!=nil{ fmt.Println("readString err=",err) } line=strings.Trim(line,"\r\n") if line=="exit"{ fmt.Println("客户端退出。。。") break } //再将line发送给服务器 n,err:=conn.Write([]byte(line)) if err!=nil{ fmt.Println("conn.Write err=",err) } fmt.Printf("客户端发送了%d字节的数据",n) } }
2.