qt实现简单聊天(一个服务器和多个客服端)(代码片段)

author author     2022-10-21     255

关键词:

源码地址:https://github.com/haidragon/easyChat
思路 :

  1. 一个服务器一直接听某个 ip 的某个端口
    listen(QHostAddress::Any,port);
    2.一个服务器有一个容器保存所有各客服端的链接(每个链接都是一个类)。QList<TcpClientSocket> tcpClientSocketList;每当一个客服端链接上那个服务器一直接听的套节字时。服务器会自动调用一个函数。incomingConnection(qintptr socketDescriptor);(这个函数是继承过来的虚函数)
    3.每次调用链接函数时 new 一个新的客服端流(也就是另外增加一个类。这个类就是客服端流类)TcpClientSocket
    tcpClientSocket=new TcpClientSocket(this);
    4.服务器管理所有的服端流。
    5.每次新创建一个客服端流时会往流里写入链接成功的数据。

    //链接后就往套节字里发内容
    void TcpClient::slotConnected()
    
    sendBtn->setEnabled(true);
    enterBtn->setText(tr("离开"));
    
    int length=0;
    QString msg=userName+tr(":Enter Chat Room");
    if((length=tcpSocket->write(msg.toLatin1(),msg.length()))!=msg.length())
    
        return;
    
    

    6.由于每个客服端流是分开的只有服务器能够知道所有流里的数据。因此每当有客服端流中有数据时在服务器中会发给其它客服端流。其它客服端流只要流中有数据会一直更新。实现了简单群聊。

    void Server::updateClients(QString msg,int length)
    
    emit updateServer(msg,length);
    //这里是往每个链接里与 
    for(int i=0;i<tcpClientSocketList.count();i++)
    
        QTcpSocket *item = tcpClientSocketList.at(i);
        if(item->write(msg.toLatin1(),length)!=length)
        
            continue;
        
    
    

    7.服务器端也实现了 ui 见面
    8.每个客服端只要断开链接。它就会在这个流中发一个断开信号。因为服务器保存了每个客服端的流。当某个客服端流断开时会发一个断开信号同时带上标志。服务器只要检测到了这个信号会及时处理。

    
    else
    
        int length=0;
        QString msg=userName+tr(":Leave Chat Room");
        if((length=tcpSocket->write(msg.toLatin1(),msg.length()))!=msg. length())
        
            return;
        
    
        tcpSocket->disconnectFromHost();
    
        status=false;
    
    
        /////////  tcpclientsocket类
        void TcpClientSocket::slotDisconnected()
    
    emit disconnected(this->socketDescriptor());
    
    ///server类
    void Server::slotDisconnected(int descriptor)
    
    for(int i=0;i<tcpClientSocketList.count();i++)
    
        QTcpSocket *item = tcpClientSocketList.at(i);
        if(item->socketDescriptor()==descriptor)
        
            tcpClientSocketList.removeAt(i);
            return;
        
    
    return;
    

基于websocket实现一个简单的网站在线客服聊天室案例(代码片段)

...天室,进行客服解答功能,本节我们使用websocket实现一个简单的网站在线客服聊天功能,效果如下:正文后端引入websocket的pom依赖<dependency> <groupId>org.springframewor 查看详情

springcloud客服端负载均衡ribbon

...基于Http和TCP的客服端负载均衡工具,它是基于NetflixRibbon实现的。它不像服务注册中心、配置中心、API网关那样独立部署,但是它几乎存在于每个微服务的基础设施中。包括前面的提供的声明式服务调用也是基于该Ribbon实现的。... 查看详情

java是如何实现客服在线聊天功能的?

...现服务端:在服务端实现在线聊天功能,需要创建WebSocket服务器,并实现消息处理逻辑。在Java中,可以使用JavaWebSocketAPI,该API提供了javax.websocket包中的类和接口,可以方便地创建WebSocket服务器和处理WebSocket消息。在服务端,需... 查看详情

springbootcookie和session的区别

cookie的工作原理。Cookie是服务器发送给客服端的一段文本由服务器设置set-Cookie响应头,以键值对方式发送给客服端,客服端再次请求时会将cookie以请求头的方式发送给服务器,服务器接收后,发现两次cookie一样,就以为是同一... 查看详情

(4)优化tcp编写客服端上传图片,服务端给客服端发消息问好(代码片段)

...服端发消息问好此demo的在上一个的基础上实现客服端与服务器端互相发送消息给对方,提高数据的读与取的效率,首先要先启动服务端,否则报错,因为TCP是可靠协议,所以没有对应的服务端时会报错,发送数据为图片一.编写TCP... 查看详情

客服端与服务端app支付宝支付接口联调的那些坑

...接传给SDK发起请求。文档和Demo是为了示例效果在客户端实现。商品的订单信息和签名应该放在服务端进行,将最好生成的orderString发送给客户端,客户端直接换起支付,处理好回调就ok。思路很简单,但实现却要下番功夫。坑一... 查看详情

java中tcp服务端和客服端通讯(代码片段)

客户端publicclassSocketClasspublicstaticvoidmain(String[]args)throwsIOException//创建一个客户端对象Socket,构造方法绑定服务器的IP地址和端口号Socketsocket=newSocket("192.168.1.81",8000);//使用Socket对象中的方法getoutputstream( 查看详情

升讯威在线客服系统客服端英文界面的实现方法(代码片段)

...!本文重点从技术角度介绍了客服端多国语言界面的实现方法。在线客服客服端,支持中英文双语界面࿱ 查看详情

升讯威在线客服系统客服端英文界面的实现方法(代码片段)

...!本文重点从技术角度介绍了客服端多国语言界面的实现方法。在线客服客服端,支持中英文双语界面࿱ 查看详情

axis2的wsdl2java命令可以生成wsdl的服务端和客服端代码,请问各位大牛这个客服端和服务端的有啥区别。

...出参数、返回值及相关的数据类型等,再通过WSDL来生成服务器端和客户端,这样的好处是:服务端不用关心客户端怎么调用,客户端也不用关系服务端如何实现。参考技术Aaxis2的wsdl2java命令生成的客户端代理类就像是客户端的... 查看详情

使用wpf+chrome内核实现在线客服系统的复合客服端程序(代码片段)

本系列文章详细介绍使用.netcore和WPF开发升讯威在线客服与营销系统的过程。本产品已经成熟稳定并投入商用。免费使用&私有化部署免费下载:https://docs.shengxunwei.com/Post/f7bc8496-14ee-4a53-07b4-08d8e3da6269视频实拍:演示升讯... 查看详情

使用wpf+chrome内核实现在线客服系统的复合客服端程序(代码片段)

本系列文章详细介绍使用.netcore和WPF开发升讯威在线客服与营销系统的过程。本产品已经成熟稳定并投入商用。免费使用&私有化部署免费下载:https://docs.shengxunwei.com/Post/f7bc8496-14ee-4a53-07b4-08d8e3da6269视频实拍:演示升讯... 查看详情

http协议(代码片段)

...文本传输协议。该协议是详细规定了浏览器和万维网网络服务器之间相互通信的规则的。也就是说,HTTP就是一个通信规则,它规定了客服端向服务端发送请求内容的格式以便服务器能识别;也规定了服务器向客服端返回的内容格... 查看详情

signalr2.1简单入门项目

概述  SignalR是通讯框架,前台Web页面与后台服务实现数据的交互。ASP.NETSignalR是一个为ASP.NET开发人员的库,简化了将实时web功能添加到应用程序的过程。实时Web功能使服务端代码推送内容到链接可客服端并立即应用成为可能... 查看详情

(二十)atp应用测试平台——websocket实现微服务版在线客服聊天室实战案例(代码片段)

前言在前面的博客内容中我们介绍了如何使用websocket实现一个网页版的在线客服聊天室,众所周知,由于websocket是一个长连接,要和服务端保持会话连接,所以其本身并不适用于微服务环境,在微服务环境中&#... 查看详情

javanioudp实现群转发

场景很简单,就是多个客户端通过udp,连接到服务器(其实是无连接的,就是服务器保存了客户端的ip信息)。然后通过udp协议先服务器发送消息,然后服务器在通过udp转发在各个客服端。这个是不是观察者模式server代码publicclas... 查看详情

java程序怎么调用webservice接口,实现发送短信功能

给你一个最简单的方法:第一、根据http://134.224.102.6:80/CompanySendSmInf/services/SmsInf?wsdl拿到WSDL文件。第二、根据Axis的jar包,把WSDL文件生成客服端java代码。(可以把java文件打成jar文件,便于管理。怎么生成java代码,百度里都有说... 查看详情

如果需要两个cookie发往客服端,需要的代码是

...的方式是存在session里http是一种无状态协议,浏览器请求服务器是无状态的无状态:指一次用户请求时,浏览器、服务器无法知道之前这个用户做过什么,每次请求都是一次新的请求。无状态原因:浏览器与服务器是使用socket套... 查看详情