前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >手把手教你用go语言实现聊天室

手把手教你用go语言实现聊天室

原创
作者头像
手撕代码八百里
发布2024-01-10 22:15:25
1990
发布2024-01-10 22:15:25
举报
文章被收录于专栏:猿计划猿计划

前言&准备开发环境

环境:Ubuntu

如果你没安装go语言开发环境,可以这样安装:

代码语言:shell
复制
sudo apt update
sudo apt install golang

验证是否安装成功:

代码语言:shell
复制
go version

还可以通过编译安装和从官网下载安装包的方式。

实现代码

先实现客户端:

创建文件:s.go

代码语言:go
复制
package main
 
import (
	"bufio"
	"fmt"
	"net"
)
 
//处理函数
func process(conn net.Conn) {
	defer conn.Close() //关闭连接
	for {
		reader := bufio.NewReader(conn)
		var buf [128]byte
		n, err := reader.Read(buf[:]) //读取数据
		if err != nil {
			fmt.Println("reand from client failed,err:", err)
			break
		}
		recvStr := string(buf[:n])
		fmt.Println("收到client端发来的数据:" + recvStr)
		conn.Write([]byte(recvStr)) //发送数据
	}
 
}
 
func main() {
	listen, err := net.Listen("tcp", "127.0.0.1:6969")
	if err != nil {
		fmt.Println("listen failed,err:", err)
		return
	}
	for {
		conn, err := listen.Accept() //建立连接
		if err != nil {
			fmt.Println("accpet failed,err:", err)
			continue
		}
		go process(conn) //启动一个goroutine处理连接
 
	}
 
}

然后创建c.go文件,实现客户端:

代码语言:go
复制
package main
 
import (
	"bufio"
	"fmt"
	"net"
	"os"
	"strings"
)
 
//客户端
func main() {
	conn, err := net.Dial("tcp", "127.0.0.1:6969")
	if err != nil {
		fmt.Println("err:", err)
		return
	}
	defer conn.Close() //关闭连接
	inputReader := bufio.NewReader(os.Stdin)
	for {
		input, _ := inputReader.ReadString('\n') //读取用户输入
		inputInfo := strings.Trim(input, "\r\n")
		if strings.ToUpper(inputInfo) == "Q" { //如果输入q就退出
			return
		}
		_, err = conn.Write([]byte(inputInfo)) //发送数据
		if err != nil {
			return
		}
		buf := [512]byte{}
		n, err := conn.Read(buf[:])
		if err != nil {
			fmt.Println("recv failed,err:", err)
			return
		}
		fmt.Println(string(buf[:n]))
	}
}

运行

代码语言:shell
复制
go run s.go
go run c.go

一个简单的聊天室就实现了,go语言真的超级简单。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言&准备开发环境
  • 实现代码
  • 运行
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档