go语言之TCP编程
服务端
package main
import (
"fmt"
"net"
)
func process(conn net.Conn){
defer conn.Close()
for{
buf:=make([]byte,1024)
fmt.Printf("服务器在等待客户端%s发送消息",conn.RemoteAddr().String())
n,err:=conn.Read(buf)//从conn读取数据
if err!=nil{
fmt.Printf("客户端%s退出。。。",conn.RemoteAddr().String())
return
}
fmt.Println(string(buf[:n]))
}
}
func main(){
fmt.Println("服务器开始监听")
listen,err:=net.Listen("tcp","0.0.0.0:7077")
if err!=nil{
fmt.Println("Listen出错!",err)
return
}
defer listen.Close()
//循环等待客户端来连接
for{
fmt.Println("等待客户端来连接")
conn,err:=listen.Accept()
if err!=nil{
fmt.Println("Accept出错",err)
}else{
fmt.Printf("Accept() suc con=%v 客户端 ip=%v\n", conn, conn.RemoteAddr().String())
}
//这里准备一个协程,为客户端服务
go process(conn)
}
}
客户端
package main
import (
"bufio"
"fmt"
"net"
"os"
)
func main(){
conn,err:=net.Dial("tcp","127.0.0.1:7077")
if err!=nil{
fmt.Println("Dial出错",err)
return
}
//功能一:客户端可以发送单行数据,然后就退出
reader := bufio.NewReader(os.Stdin) //os.Stdin 代表
//从终端读取一行用户输入,并准备发送给服务器
line, err := reader.ReadString('\n')
if err != nil {
fmt.Println("readString err=", err)
}
//再将 line 发送给 服务器
n, err := conn.Write([]byte(line))
if err != nil {
fmt.Println("conn.Write err=", err)
}
fmt.Printf("客户端发送了 %d 字节的数据,并退出", n)
}

浙公网安备 33010602011771号