Qt零拷贝在c++中的应用

zero copy in Qt application in C++

本文关键字:应用 c++ 拷贝 Qt      更新时间:2023-10-16

这是我写的程序,在Qt应用程序中实现零复制,但得到一些错误写在下面:

//client.h
#ifndef CLIENT1_H
#define CLIENT1_H
#include <QObject>
#include <QString>
#include <QtNetwork/QTcpSocket>
#include <QtNetwork/QtNetwork>
class Client: public QObject
{
Q_OBJECT
public:
  Client(QObject* parent = 0);
  ~Client();
  void start(QString address, quint16 port);
public slots:
  void startTransfer();
private:
  QTcpSocket client;
};
#endif // CLIENT1_H
//client.cpp
#include "client1.h"
#include <QtNetwork/QHostAddress>
#include <MSWSockDef.h>
#include <MSWSock.h>
Client::Client(QObject* parent): QObject(parent)
{
  connect(&client, SIGNAL(connected()),
          this, SLOT(startTransfer()));
}
Client::~Client()
{
  client.close();
}
void Client::start(QString address, quint16 port)
{
  QHostAddress addr(address);
  client.connectToHost(addr, port);
}
void Client::startTransfer()
{
    int TransmitFile( client,
                      hfile,
                      NULL,
                      NULL,
                      NULL,
                      NULL,
                      TF_USE_SYSTEM_THREAD
                    );
}
//main.cpp
#include <QCoreApplication>
#include <fstream>
#include <iostream>
#include "client1.h"
#include <QtNetwork/QtNetwork>
#include <Windows.h>
using namespace std;
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    HFILE hfile;
    //Creates an instance of ofstream, and opens example.txt
    ofstream a_file ( "example.txt" );
    // Outputs to example.txt through a_file
    a_file<<"This text will now be inside of example.txt";
    // Close the file stream explicitly
    hfile = a_file;
    //a_file.close();
    //hfile = a_file.open("example.txt");
    //hfile = a_file.open("example.txt",ios_base::app);
    Client client;
    client.start("127.0.0.1", 8888);
    return a.exec();
}

错误如下:

C:Program FilesMicrosoft SDKsWindowsv7.0AincludeMSWSock.
error: C2061: syntax error : identifier 'LPWSAMSG'
C:Program FilesMicrosoft SDKsWindowsv7.0AincludeMSWSock.h
error: C4430: missing type specifier - int assumed. Note: C++ does not support default-int
C:Program FilesMicrosoft SDKsWindowsv7.0AincludeMSWSock.h
error: C4430: missing type specifier - int assumed. Note: C++ does not support default-int

我知道在transmitfile() api中有错误,但这些错误可以被删除,关于上面的错误呢?"在这里输入密码?"

完成以上操作后,只需运行一次qmake,它就可以工作了

您可能需要包含Winsock2.h,您可以试试吗?

尝试删除Mswsockdef.h include。

…Mswsockdef.h头文件,自动包含在h头文件。Mswsockdef.h头文件不应该是直接使用。