Qt实现仿微信在线聊天工具(服务器、客户端)V1_ 03

上一篇实现了窗口移动以及最大化最小化,本章将要实现与服务器的连接

本章内容

  1. 服务器搭建
  2. 客户端与服务器的连接
  3. 客户端收发消息



服务器搭建

在本专题的第一篇文章《Qt实现仿微信在线聊天工具(服务器、客户端)V1_ 01》中创建了服务器工程,这里实现服务器的基本功能。
首先这里要用到Qt的网络编程方面的知识,不太熟悉的小伙伴建议先去学习一下。

主要用到的是Tcp、Udp,对应的Qt模块是 “Network

由于服务器在这里的功能主要是接收客户端发送过来的消息,处理并转发给对应单位,可能是其他用户,也可能是原客户端的回执
这里的服务器界面设计比较简单,主要是为了回显客户端发过来的消息,方便开发调试
在这里插入图片描述
看下.h文件

#pragma once

#include <QMainWindow>
#include <qtcpserver.h>
#include "ui_MyChatToolServer.h"
#include <qtcpsocket.h>
#include <QTimer>

class MyChatToolServer  : public QMainWindow
{
   
	Q_OBJECT

public:
	MyChatToolServer(QWidget *parent = nullptr);
	~MyChatToolServer();

private slots:
	//创建服务器按钮对应的槽函数
	void slotStartServer();
	//响应客户端连接请求的槽函数
	void onNewConnection();
	//接收客户端聊天消息的槽函数
	void onReadyRead();
	//转发聊天消息给其它客户端的槽函数
	void sendMessage(const QByteArray&);
	//定时器检查客户端套接字是否为正常连接状态的槽函数
	void onTimeout(void);

	//void sendMsg(const QByteArray&, QList<QTcpSocket*> targets);

private:
	//void handleLoginMsg(QByteArray buf, QTcpSocket*);
	Ui::MyChatToolServerClass ui;

	QTcpServer tcpServer;//TCP服务器
	quint16 port;//服务器端口,quint16-->unsigned short
	QList<QTcpSocket*> tcpClientList;//容器:保存和客户端通信的套接字
	//QMap<QString, QTcpSocket*> m_mapTcpSockets;	//保存用户id到对应套接字的映射
	QTimer timer;//定时器,定时检查容器中和客户端通信的套接字是否为正常连接状态

};

.cpp文件

#include "MyChatToolServer.h"
#include <qmessagebox>
#include <QDebug>

MyChatToolServer::MyChatToolServer(QWidget *parent)
	: QMainWindow(parent)
{
   
	ui.setupUi(this);

	connect(ui.btnStartServer, &QPushButton::clicked, this, &MyChatToolServer::slotStartServer, Qt::UniqueConnection);
}

MyChatToolServer::~MyChatToolServer()
{
   }


//创建服务器按钮对应的槽函数
void MyChatToolServer::slotStartServer()
{
   
	//获取服务器端口
	port = 8080;
	//设置监听服务器的IP和端口
	//QHostAddress::Any ==> QHostAddress("0.0.0.0");
	if (tcpServer.listen(QHostAddress::Any, port) == false) {
   
		QMessageBox::information(nullptr, "failed", QString::fromLocal8Bit("创建服务器失败"));
		return;
	}
	else {
   
		QMessageBox::information(nullptr, "success", QString::fromLocal8Bit("创建服务器成功"));
		//当有客户端向服务器发送连接请求时,发送信号newConnection
		connect(&tcpServer, SIGNAL(newConnection
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值