golang开发一个聊天系统例子

以下是一个基本的golang聊天系统示例,使用netbufio包建立基于命令行的客户端和服务端连接。该示例可以让多个客户端之间进行文本聊天。

服务端代码:

package main

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

func main() {
	fmt.Println("Starting server...")
	ln, err := net.Listen("tcp", ":8080")
	if err != nil {
		fmt.Println(err)
		return
	}
	defer ln.Close()

	for {
		conn, err := ln.Accept()
		if err != nil {
			fmt.Println(err)
			continue
		}
		fmt.Println(conn.RemoteAddr().String(), "connected")
		go handleConnection(conn)
	}
}

func handleConnection(conn net.Conn) {
	username := conn.RemoteAddr().String()
	defer conn.Close()

	for {
		message, err := bufio.NewReader(conn).ReadString('\n')
		if err != nil {
			fmt.Println(username, "disconnected")
			return
		}

		message = strings.TrimSpace(message)

		// check command
		if strings.HasPrefix(message, "/") {
			command := strings.Split(message[1:], " ")[0]
			switch command {
			case "username":
				username = strings.Split(message[1:], " ")[1]
				conn.Write([]byte(fmt.Sprintf("your username is set to %s\n", username)))
			case "quit":
				fmt.Println(username, "disconnected")
				conn.Write([]byte("Goodbye!\n"))
				return
			default:
				conn.Write([]byte(fmt.Sprintf("unknown command %s\n", command)))
			}
		} else {
			fmt.Printf("%s: %s", username, message)
			for _, c := range clients {
				c.Write([]byte(fmt.Sprintf("%s: %s", username, message)))
			}
		}
	}
}

客户端代码:

package main

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

func main() {
	conn, err := net.Dial("tcp", "localhost:8080")
	if err != nil {
		fmt.Println(err)
		return
	}
	defer conn.Close()

	reader := bufio.NewReader(os.Stdin)
	for {
		fmt.Print("-> ")
		text, _ := reader.ReadString('\n')
		fmt.Fprintln(conn, text)

		message, err := bufio.NewReader(conn).ReadString('\n')
		if err != nil {
			fmt.Println(err)
			return
		}
		fmt.Print("Server: " + message)

		if strings.TrimSpace(text) == "/quit" {
			fmt.Println("Connection terminated")
			return
		}
	}
}

使用方法:

  1. 运行服务器代码
  2. 打开多个终端窗口,运行客户端代码,并按照提示输入用户名
  3. 在客户端窗口输入消息,消息将发送到服务器并在所有客户端窗口上显示
  4. 在客户端窗口输入/quit命令可以退出连接

该示例只是一个最基本的聊天系统,您可以根据需求对其进行更改和扩展。

相关推荐

  1. golang开发一个聊天系统例子

    2023-12-09 06:32:02       42 阅读
  2. 通过例子学习golang的Goroutine

    2023-12-09 06:32:02       29 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-09 06:32:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-09 06:32:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-09 06:32:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-09 06:32:02       20 阅读

热门阅读

  1. HTML5 基础总结

    2023-12-09 06:32:02       44 阅读
  2. Qt OpenCV 学习(六):kmeans聚类算法实现背景替换

    2023-12-09 06:32:02       33 阅读
  3. 云计算ACP认证考试题库0-100

    2023-12-09 06:32:02       37 阅读
  4. ssh框架原理及流程

    2023-12-09 06:32:02       38 阅读
  5. G1 GC基本逻辑

    2023-12-09 06:32:02       27 阅读
  6. LeetCode738. Monotone Increasing Digits

    2023-12-09 06:32:02       28 阅读