TCP编程入门
客户端
package main
import (
"bufio"
"fmt"
"net"
"os"
"strings"
)
func main() {
conn, err:=net.Dial("tcp","127.0.0.1:8888");
if err != nil{
fmt.Printf("client dial err= %v",err)
return
}
fmt.Println("client 成功连接到服务器端... ");
reader := bufio.NewReader(os.Stdin);
for{
//从终端读取一行数据发送给服务器
line,err := reader.ReadString('\n')
if err != nil{
fmt.Printf("readString err=%s\n",line);
}
//再将line,发送给 服务器
n,err:=conn.Write( []byte(line) );
if err != nil{
fmt.Println("conn.write err=",err);
}
fmt.Printf("clent 发送 %d 个字节\n",n);
if strings.TrimSpace(line) == "exit" {
break
}
}
}
服务端
package main
import (
"fmt"
"net"
)
func process(conn net.Conn) {
//循环接受客户端发送的数据
defer conn.Close();//关闭conn
for{
//接收请求
buf:=make([]byte,1024)
//1.等待客户端通过conn发送信息给我
//1.1如果客户端没有发送write[发送],那么协程就阻塞在这里
fmt.Println("服务器等待。。。",conn.RemoteAddr().String());
n,err:=conn.Read(buf)
if err != nil{
//fmt.Println("服务端的read出错 err=",err);
fmt.Println("客户端已退出 这个协程关闭");
return
}
//2.显示客户端发送的内容到服务器的终端
fmt.Print(string(buf[:n]))
if string(buf[:n])=="exit"{
return
}
}
}
func main() {
fmt.Println("服务器开始监听.....");
listen,err:=net.Listen("tcp", "0.0.0.0:8888");
if err!=nil{
fmt.Println("listen err=",err);
return
}
defer listen.Close()//延时关闭
//循环等待客互端连接
for {
fmt.Println("等待客户端连接.... ");
conn,err:=listen.Accept()
if err!=nil{
fmt.Println("Accept() err=",err);
}else {
fmt.Printf("Accept() suc conn=%v\n",conn);
fmt.Printf("客户端ip地址 %v\n",conn.RemoteAddr().String());
}
//这里起一个协程为客户端服务
go process(conn)
}
//fmt.Printf("listen= suc%v\n",listen);
}
本文作者:可可爱爱奇奇怪怪。。。
本文链接:https://www.cnblogs.com/ccsuf/p/16269151.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。