go简单聊天(代码片段)

--just-lbk --just-lbk     2023-01-01     525

关键词:

用Go简单实现网络通信

其余功能可以在这个模型上继续加,比如增加通信人数,实现聊天

server 端

package main

import (
    "fmt"
    "log"
    "net"
    "os"
)

func broadcaster()     //功能代完善



func handleCoon(conn net.Conn) 
    msg := ""
    for 
        data := make([]byte,1024)
        msg_read,err := conn.Read(data)
        if msg_read == 0   //也可以写成  if(msg_read == 0 || err != nil)   
            continue
        else if err != nil 
            fmt.Fprintf(os.Stdout,"readmsg err = %v",err)
            continue
        

        msg_read_str := string(data[0:msg_read])
        if msg_read_str == "quit" 
            conn.Write([]byte("Exit..."))
            break
        

        fmt.Println("client msg = ",msg_read_str)

        fmt.Printf("send to client : ")
        fmt.Scan(&msg)

        conn.Write([]byte(msg))
    

    fmt.Println("client close")
    conn.Close()


func main() 

    lis,err := net.Listen("tcp","127.0.0.1:8888")
    if err != nil 
        log.Fatal(err)
    

    defer lis.Close()
    fmt.Println(lis)
    go broadcaster()

    for 
        conn,err := lis.Accept()
        if err != nil 
            fmt.Fprintf(os.Stdout,"err = %v",err)
            continue
        

        defer conn.Close()

        go handleCoon(conn)
    


client 端
package main

import (
    "fmt"
    "net"
    "os"
)

func main() 

    conn,err := net.Dial("tcp","127.0.0.1:8888")
    if err != nil 
        fmt.Fprintf(os.Stdout,"err = %v",err)
    

    defer conn.Close()

    fmt.Println("connect server sucess")

    var msg string

    for 
        msg = ""
        fmt.Printf("send msg : ")
        fmt.Scan(&msg)

        conn.Write([]byte(msg))

        data := make([]byte,1024)
        msg_read,err := conn.Read(data)
        if msg_read == 0     //和上面一样
            fmt.Println("to short for msg")
            continue
        else if err != nil 
            fmt.Fprintf(os.Stdout,"err = %v",err)
            continue
        

        msg_read_str := string(data[0:msg_read])

        if msg_read_str == "quit" 
            fmt.Println("server close.....")
            break
        
        fmt.Println("to you msg = ",msg_read_str)
    

技术分享图片








go语言实现简单的聊天室(代码片段)

通常聊天室的架构分为服务器端和客户端:服务器端:接受来自于客户端的连接请求并建立连接;所有客户端的连接会放进连接池中,用于广播消息;客户端:连接服务器;向服务器发送消息;接收服务器的广播消息;注意事项... 查看详情

go语言实现聊天室(代码片段)

go语言实现聊天室聊天室分为服务端和客户端。第一部分为服务端代码,第二部分为客户端代码。一、服务端代码//chatroomserverpackagemainimport("fmt""net")//定义函数checkError,用来错误处理funccheckError(errerror)iferr!=nilpanic(err)//定义一个函... 查看详情

go语言实践_实现点对点聊天室(代码片段)

一、目的使用Go语言实现一个服务器端与客户端的聊天室。软件:Goland,Go1.9 二、思路1,首先启动服务器端,使用listen_socket函数监听IP地址上的客户端连接;2,启动客户端,并向服务器端发送数据,发送结束后端口阻塞,等... 查看详情

textdbi简单聊天窗口(代码片段)

查看详情

go语言实战基于websocket+mongodb的im即时聊天demo(代码片段)

...项目是基于WebSocket+MongoDB+MySQL+Redis。业务逻辑很简单,只是两人的聊天。MySQL用来存储用户基本信息MongoDB用来存放用户聊天信息Redis用来存储处理过期信息github地址https://github.com/CocaineCong/gin-chat-demo1.WebSocket原理WebSocke... 查看详情

go语言系列之并发编程(代码片段)

...:同一时间段内执行多个任务(你在用微信和两个女朋友聊天)。并行:同一时刻执行多个任务(你和你朋友都在用微信和女朋友聊天)。Go语言的并发通过goroutine实现。goroutine类似于线程,属于用户态的线程,我们可以根据需... 查看详情

golang简单的golang聊天服务器(代码片段)

查看详情

golang简单的go管道执行器(代码片段)

查看详情

springboot整合websocket简单聊天室(代码片段)

springboot整合websocket(一)简单聊天室springboot整合websocket(一)简单聊天室springboot整合websocket(二)上传文件(引导篇)springboot整合websocket(三)上传文件(终篇& 查看详情

html如何使用jsf2实现简单聊天(代码片段)

查看详情

thrift简单示例(go语言)(代码片段)

这个thrift的简单示例来自于官网(http://thrift.apache.org/tutorial/go),因为官方提供的例子简单易懂,所以没有必要额外考虑新的例子.关于安装的教程,可以参考https://www.cnblogs.com/albizzia/p/10838646.html,关于thrift文件的语法,可以参考:https://www.... 查看详情

基于udp协议简单聊天(代码片段)

server端importsocketsk=socket.socket(type=socket.SOCK_DGRAM)sk.bind((‘127.0.0.1‘,8080))whileTrue:msg,addr=sk.recvfrom(1024)print(msg.decode(‘utf-8‘))info=input(‘>>>‘)info=(‘ 查看详情

go——goquery简单demo(代码片段)

packagemainimport( "fmt" "github.com/PuerkitoBio/goquery" "os")funcmain() f,_:=os.Open("test.xml") doc,err:=goquery.NewDocumentFromReader(f) iferr!=nil r 查看详情

golang一个简单的命令行聊天室,如irc(代码片段)

查看详情

项目实战——高拓展的实时聊天系统(代码片段)

...类图前端效果展示登录和注册用户信息添加好友好友实时聊天以及历史聊天记录获取开源仓库:https://github.com/ACking-you/my_chat注意:本项目使用go1.18进行开发,且使用到了goworkspace进行内部依赖管理,以及go泛型简... 查看详情

10.go语言-面向对象简单了解(代码片段)

1.面向对象1.1匿名字段packagemainimport"fmt"typePersonstruct namestring sexstring ageinttypeStudentstruct Person idint addrstringfuncmain() s1:=StudentPerson"Simi","man",20 查看详情

pythongo中的非常简单(和不完整)的go实现(代码片段)

查看详情

golang简单的go程序从控制台行读取(代码片段)

查看详情