最近需要一个数据转发的程序,昨天快下班之前看了QTcpServer和QTcpSocket模块,边看文档,边写了一个发送消息的demo。下完就下班了,今天早晨来测试,发现没什么问题。
QTcpServer 和QtcpSocket的封装,让我们写这类程序变得非常的简单了。
- 实例化一个QTcpServer对象,启动监听程序来监听某个端口。
- 有连接过来后,建立连接,然后通过这个链接进行通讯
因为QTcpSocket继承自QIOdevice 所以可以通过流的方式来操作,可以进行读写。
好了,先看看我写的demo的服务端
界面是随便的拖了一个按钮,堆起来的。
.h文件代码
#ifndef TCPSERVICETESTDLG_H
#define TCPSERVICETESTDLG_H
#include <QDialog>
#include <QMap>
class QTcpServer;
class QTcpSocket;
namespace Ui {
class TCPServiceTestDlg;
}
class TCPServiceTestDlg : public QDialog
{
Q_OBJECT
public:
explicit TCPServiceTestDlg(QWidget *parent = 0);
~TCPServiceTestDlg();
private:
void handleSendData(QTcpSocket * socket,const QString& msg); //处理发送数据
private slots:
void on_tb_start_clicked();//开始监听
//停止监听
void on_tb_stop_clicked();
//发送数据
void on_pb_send_clicked();
protected slots:
void slot_handleNewConnection();//处理连接
void slot_handleReciveData(); //接收数据
void slot_handleDisconnectSocket();//处理断开连接
private:
Ui::TCPServiceTestDlg *ui;
QTcpServer * server;
QMap<QString,QTcpSocket *> socketMap; //记录链接进来的ip
};
#endif // TCPSERVICETESTDLG_H
.cpp代码
#include "TCPServiceTestDlg.h"
#include "ui_TCPServiceTestDlg.h"
#include <QTcpServer>
#include <QTcpSocket>
#include <QDateTime>
TCPServiceTestDlg::TCPServiceTestDlg(QWidget *parent) :
QDialog(pa