热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

基于tcp和qt的简单聊天室搭建

使用Qt库中的<QTcpServer>和<QTcpSocket>类实现局域网络下的聊天室。分为服务端和客户端;服务端接收来自各个客户端的信息,并发送到所有客户端;客户端用

使用Qt库中的   和类实现局域网络下的聊天室。

分为服务端和客户端;

服务端接收来自各个客户端的信息,并发送到所有客户端;

客户端用于用户登陆及聊天。

客户端:

使用类即可;

tcp_client.h

namespace Ui {
class tcp_cilent;
}

class tcp_cilent : public QWidget
{
Q_OBJECT

public:
explicit tcp_cilent(QWidget *parent = 0);
~tcp_cilent();

private slots:
void on_pushButtonconnect_clicked();

void on_send_clicked();
void slotConnected();
void slotDisconnected();
void slotError(QAbstractSocket::SocketError);
void slotStateChanged(QAbstractSocket::SocketState);
void slotReadData();
//bool isconnect;
private:
Ui::tcp_cilent *ui;
QTcpSocket*tcpsocket;

};
tcp_client.cpp
tcp_cilent::tcp_cilent(QWidget *parent):
QWidget(parent),
ui(new Ui::tcp_cilent)
{
ui->setupUi(this);
ui->send->setDisabled(true);
ui->lineEditsend->setDisabled(true);
//iscOnnect=false;
}
tcp_cilent::~tcp_cilent()
{
delete ui;
}

void tcp_cilent::on_pushButtonconnect_clicked()
{


tcpsocket=new QTcpSocket(this);
connect(tcpsocket,SIGNAL(connected()),this,SLOT(slotConnected()));
connect(tcpsocket,SIGNAL(disconnected()),this,SLOT(slotDisconnected()));
connect(tcpsocket,SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(slotError(QAbstractSocket::SocketError)));
connect(tcpsocket,SIGNAL(stateChanged(QAbstractSocket::SocketState)),this,SLOT(slotStateChanged(QAbstractSocket::SocketState)));
connect(tcpsocket,SIGNAL(readyRead()),this,SLOT(slotReadData()));

QHostAddress host(ui->LineEdithost->text());
tcpsocket->connectToHost(host,ui->lineEditport->text().toShort());


//iscOnnect=true;
// ui->pushButtonconnect->setText("close");

/* else
{
iscOnnect=false;
ui->pushButtonconnect->setText("connect");
}*/
}


void tcp_cilent::slotReadData()
{
while(tcpsocket->bytesAvailable()>0)
{
QByteArray ba;
ba.resize(tcpsocket->bytesAvailable());
tcpsocket->read(ba.data(),ba.size());
ui->listWidget->addItem(QString(ba));
ui->listWidget->scrollToBottom();
}
}



void tcp_cilent::slotConnected()
{
//iscOnnect=true;
ui->send->setDisabled(false);
ui->lineEditsend->setDisabled(false);
}


void tcp_cilent::slotDisconnected()
{
//iscOnnect=false;
qDebug()<<"connecttion lost\n";
ui->send->setDisabled(true);
ui->lineEditsend->setDisabled(true);
}


void tcp_cilent::slotError(QAbstractSocket::SocketError err)
{
qDebug()<<"error"<}

void tcp_cilent::slotStateChanged(QAbstractSocket::SocketState s)
{

qDebug()<<"state"<}

void tcp_cilent::on_send_clicked()
{
tcpsocket->write(ui->user->text().toUtf8()+": "+ui->lineEditsend->text().toUtf8());
ui->lineEditsend->clear();
}

服务器端


#ifndef MYTCPSOCKET_H
#define MYTCPSOCKET_H

#include
#include
class MyTcpSocket : public QTcpSocket
{
Q_OBJECT
public:
MyTcpSocket(QObject*parent=0);
~MyTcpSocket();
signals:
void disconnected(MyTcpSocket*);
void updateMsg(QByteArray);
private slots:
void slotDisconnected();
void slotReadData();
};

#endif // MYTCPSOCKET_H






推荐阅读
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 本文介绍了一个React Native新手在尝试将数据发布到服务器时遇到的问题,以及他的React Native代码和服务器端代码。他使用fetch方法将数据发送到服务器,但无法在服务器端读取/获取发布的数据。 ... [详细]
author-avatar
淋殁
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有