热门标签 | 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






推荐阅读
  • 深入解析 Android 中 EditText 的 getLayoutParams 方法及其代码应用实例 ... [详细]
  • 本文介绍了如何利用 Delphi 中的 IdTCPServer 和 IdTCPClient 控件实现高效的文件传输。这些控件在默认情况下采用阻塞模式,并且服务器端已经集成了多线程处理,能够支持任意大小的文件传输,无需担心数据包大小的限制。与传统的 ClientSocket 相比,Indy 控件提供了更为简洁和可靠的解决方案,特别适用于开发高性能的网络文件传输应用程序。 ... [详细]
  • 本文详细介绍了一种利用 ESP8266 01S 模块构建 Web 服务器的成功实践方案。通过具体的代码示例和详细的步骤说明,帮助读者快速掌握该模块的使用方法。在疫情期间,作者重新审视并研究了这一未被充分利用的模块,最终成功实现了 Web 服务器的功能。本文不仅提供了完整的代码实现,还涵盖了调试过程中遇到的常见问题及其解决方法,为初学者提供了宝贵的参考。 ... [详细]
  • Java Socket 关键参数详解与优化建议
    Java Socket 的 API 虽然被广泛使用,但其关键参数的用途却鲜为人知。本文详细解析了 Java Socket 中的重要参数,如 backlog 参数,它用于控制服务器等待连接请求的队列长度。此外,还探讨了其他参数如 SO_TIMEOUT、SO_REUSEADDR 等的配置方法及其对性能的影响,并提供了优化建议,帮助开发者提升网络通信的稳定性和效率。 ... [详细]
  • 本文详细介绍了使用 Python 进行 MySQL 和 Redis 数据库操作的实战技巧。首先,针对 MySQL 数据库,通过 `pymysql` 模块展示了如何连接和操作数据库,包括建立连接、执行查询和更新等常见操作。接着,文章深入探讨了 Redis 的基本命令和高级功能,如键值存储、列表操作和事务处理。此外,还提供了多个实际案例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 尽管我们尽最大努力,任何软件开发过程中都难免会出现缺陷。为了更有效地提升对支持部门的协助与支撑,本文探讨了多种策略和最佳实践,旨在通过改进沟通、增强培训和支持流程来减少这些缺陷的影响,并提高整体服务质量和客户满意度。 ... [详细]
  • 在探讨C语言编程文本编辑器的最佳选择与专业推荐时,本文将引导读者构建一个基础的文本编辑器程序。该程序不仅能够打开并显示文本文件的内容及其路径,还集成了菜单和工具栏功能,为用户提供更加便捷的操作体验。通过本案例的学习,读者可以深入了解文本编辑器的核心实现机制。 ... [详细]
  • 本指南介绍了如何在ASP.NET Web应用程序中利用C#和JavaScript实现基于指纹识别的登录系统。通过集成指纹识别技术,用户无需输入传统的登录ID即可完成身份验证,从而提升用户体验和安全性。我们将详细探讨如何配置和部署这一功能,确保系统的稳定性和可靠性。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • 在使用 Qt 进行 YUV420 图像渲染时,由于 Qt 本身不支持直接绘制 YUV 数据,因此需要借助 QOpenGLWidget 和 OpenGL 技术来实现。通过继承 QOpenGLWidget 类并重写其绘图方法,可以利用 GPU 的高效渲染能力,实现高质量的 YUV420 图像显示。此外,这种方法还能显著提高图像处理的性能和流畅性。 ... [详细]
  • 在Linux系统中,网络配置是至关重要的任务之一。本文详细解析了Firewalld和Netfilter机制,并探讨了iptables的应用。通过使用`ip addr show`命令来查看网卡IP地址(需要安装`iproute`包),当网卡未分配IP地址或处于关闭状态时,可以通过`ip link set`命令进行配置和激活。此外,文章还介绍了如何利用Firewalld和iptables实现网络流量控制和安全策略管理,为系统管理员提供了实用的操作指南。 ... [详细]
  • 线程能否先以安全方式获取对象,再进行非安全发布? ... [详细]
  • 在Android平台上,视频监控系统的优化与应用具有重要意义。尽管已有相关示例(如http:www.open-open.comlibviewopen1346400423609.html)展示了基本的监控功能实现,但若要提升系统的稳定性和性能,仍需进行深入研究和优化。本文探讨了如何通过改进算法、优化网络传输和增强用户界面来提高Android视频监控系统的整体效能,以满足更复杂的应用需求。 ... [详细]
  • 在2015年1月的MySQL内核报告中,我们详细探讨了性能优化和Group Commit机制的改进。尽管网上已有大量关于Group Commit的资料,本文将简要回顾其发展,并重点分析MySQL 5.6及之前版本中引入的二进制日志(Binlog)对性能的影响。此外,我们还将深入讨论最新的优化措施,如何通过改进Group Commit机制显著提升系统的整体性能和稳定性。 ... [详细]
  • 开发笔记:深入解析Android自定义控件——Button的72种变形技巧
    开发笔记:深入解析Android自定义控件——Button的72种变形技巧 ... [详细]
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社区 版权所有