go语言tcp简单例子

go语言tcp连接小案例

服务端代码及注意

package main

import (
	"fmt"
	"net"
)

func process(conn net.Conn) { //起协程对链接进行处理,但是协程要拿到链接才能进行交互,故要传入连接
	//这里循环接受客户端发送的数据
	defer conn.Close() //关闭conn,一定要关闭
	for {
		//创建一个新的切片
		buf := make([]byte, 1024)
		//1.等待客户端通过conn发送信息
		//2.如果客户没有write(发送),那么协程就阻塞
		// fmt.Printf("服务器在等待客户端%s 发送信息\n", conn.RemoteAddr().String())
		n, err := conn.Read(buf) //读了多少
		if err != nil {
			fmt.Println("err = ", err)
			return

		}
		//3.显示客户端发送的内容到服务器的终端
		fmt.Print(string(buf[:n])) //到n是为了避免切片后面有乱七八糟的东西
	}
}

func main() {

	fmt.Println("开始监听")
	//tcp表示使用网络协议是tcp
	//0.0.0.0:8888表示在本地监听,8888端口

	listen, err := net.Listen("tcp", "0.0.0.0:8888")
	if err != nil {
		fmt.Println("err = ", err)
		return
	}
	defer listen.Close() //延时关闭
	//循环等待客户端来连接
	for {
		//等待客户端连接
		fmt.Println(" 等待连接 ")
		conn, err := listen.Accept() //accept返回conn
		if err != nil {
			fmt.Println("Accept() err =", err)
			return
		} else {
			fmt.Printf("Accept() success =%v,ip=%v\n", conn, conn.RemoteAddr().String())

		} //起协程,为客户端服务
		go process(conn)
	}
	// fmt.Println("listen success , ", listen)

}

客户端代码及注意

package main

import (
	"bufio"
	"fmt"
	"net"
	"os"
	"strings"
)

func main() {
	//链接到服务端
	conn, err := net.Dial("tcp", "192.168.56.1:8888")
	if err != nil {
		fmt.Println("err = ", err)
		return
	}
	fmt.Println("coon成功,", conn)
	//功能1:客户端可以发送单行输入,然后退出
	reader := bufio.NewReader(os.Stdin) //os.Stdin表示标准输入【终端】
	//从终端读取一行用户输入,并准备发送给服务器
	for {
		content, err := reader.ReadString('\n')
		if err != nil {
			fmt.Println("reader err=", err)

		}
		//当content为exit时退出
		//记得把回车符去掉,如\r\n或者是空格
		content = strings.Trim(content, " \r\n")
		if content == "exit" {
			break
		}

		//将content发送给服务器
		//这里的n是写进去了多少个字节
		n, err := conn.Write([]byte(content + "\n"))
		//上面这行注意加入换行符,因为上面去掉了,要是不加的话,服务端接收到的数据,没有换行符
		if err != nil {
			fmt.Println("conn发送失败, err=", err)
		}
		fmt.Printf("客户端发送了%d字节的数据\n", n)

	}
	fmt.Println("客户端发送了退出")

}


  • 15
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值