|
先说一下需求:QT负责 界面显示,LINUX C负责 其他的事情,由C发 数据给QT,然后QT做出显示。比如C发1,QT就显示个1。 问题:我不怎么会QT,参考 C++ GUI QT4编程里面的TCP部分,写了个server的程序,然后用C写客户端,C这边提示能够建立连接,QT那边也进入到处理链接的函数了,可是,我不知道怎么把收到的数据显示出来,或者说不知道收到了什么数据。 没有界面,我还不知道怎么加个label之类的进去……。下面贴出来QT的代码,希望各位大大,多多指教。 main.cpp - #include <QtGui/QApplication>
- #include "server.h"
- int main(int argc, char *argv[])
- {
- QApplication app(argc, argv);
- TripServer server;
- if (!server.listen(QHostAddress::Any, 6178)) {
- fprintf(stderr,"Failed to bind to port\n");
- return 1;
- }
- //server.show();
- return app.exec();
- }
server.h - #ifndef SERVER_H
- #define SERVER_H
- #include <QtGui/QWidget>
- #include <QTcpServer>
- #include <QTcpSocket>
- #include <QString>
- #include <QDate>
- class TripServer : public QTcpServer
- {
- Q_OBJECT
- public:
- TripServer(QObject *parent=0);
- private:
- void incomingConnection(int socketId);
- };
- class ClientSocket : public QTcpSocket
- {
- Q_OBJECT
- public:
- ClientSocket(QObject *parent=0);
- private slots:
- void readClient();
- private:
- void generateRandomTrip(const QString &from, const QString &to, const QDate &date, const QTime &time);
- quint16 nextBlockSize;
- };
- #endif // SERVER_H
server.cpp - #include "server.h"
- TripServer::TripServer(QObject *parent):QTcpServer(parent)
- {
- }
- void TripServer::incomingConnection(int socketId)
- {
- ClientSocket *socket = new ClientSocket(this);
- socket->setSocketDescriptor(socketId);
- }
- ClientSocket::ClientSocket(QObject *parent):QTcpSocket(parent)
- {
- connect(this, SIGNAL(readyRead()),this,SLOT(readClient()));
- connect(this,SIGNAL(disconnected()),this,SLOT(deleteLater()));
- nextBlockSize = 1;
- }
- void ClientSocket::readClient()
- {
- QDataStream in(this);
- if (nextBlockSize==0) {
- if(bytesAvailable()<sizeof(quint16)) {
- fprintf(stderr,"-AAAA-");
- return;
- }
- fprintf(stderr,"-BBBB-");
- in >> nextBlockSize;
- }
- if (bytesAvailable()<nextBlockSize) {
- fprintf(stderr,"-CCCC[%d]-",nextBlockSize);
- return;
- }
- fprintf(stderr,"-ABCD-");
- quint8 requestType;
- QString from;
- QString to;
- QDate date;
- QTime time;
- quint8 flag;
- QString tmp1 = "a";
- QString tmp2;
- //in >> requestType;
- in >> tmp2;
- if (tmp2 == tmp1)
- fprintf(stderr,"A!\n");
- QByteArray tmp = tmp2.toLatin1();
- fprintf(stderr,"[%s]\n",(const char *)tmp);
- /*
- if (requestType == 'S') {
- in >> from >> to >> date >> time >> flag;
- //std::srand(from.length()*3600+to.length()*60+time.hour());
- int numTrips = 5;//std::rand()%8;
- for (int i = 0; i<numTrips; ++i) {
- generateRandomTrip(from,to,date,time);
- }
- QDataStream out(this);
- out << quint16(0x41);
- }
- */
- //close();
- }
- void ClientSocket::generateRandomTrip(const QString &, const QString &, const QDate &date, const QTime &time)
- {
- QByteArray block;
- QDataStream out(&block, QIODevice::WriteOnly);
- out.setVersion(QDataStream::Qt_4_0);
- quint16 duration = 5;//std::rand()%200;
- out << quint16(0) << date << time << duration << quint8(1) << QString("InterCity");
- out.device()->seek(0);
- out << quint16(block.size()-sizeof(quint16));
- write(block);
- }
|