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);
}
posted @ 2022-05-24 16:33  warmhearthhh  阅读(51)  评论(0编辑  收藏  举报