suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Wie kann ein in vs2017 geschriebenes C++-Programm nach Qt Creator kopiert werden, ohne dass ein Fehler gemeldet wird?

Dies ist ein Code, den ich online gefunden habe. Es ist kein Problem, ihn in vs2017 einzufügen. Die meisten Header-Dateien können in Qt nicht verwendet werden, und einige Schlüsselwörter können in Qt nicht verwendet werden. Wie kann dieses Problem behoben werden?

#include <iostream>
#include "winsock2.h"
#pragma comment(lib,"ws2_32.lib")
using namespace std;
int main(int argc, char *argv[])
{
    const int BUF_SIZE = 64;
    WSADATA wsd;//WSADATA变量
    SOCKET sServer;//服务端套接字
    SOCKET sClient;//客户端套接字
    SOCKADDR_IN addrServ;//服务器地址
    char buf[BUF_SIZE];//接受数据缓冲区
    char sendBuf[BUF_SIZE];//返回给客户端的数据
    int retVal;//返回值
                //初始化套接字动态库
    if(WSAStartup(MAKEWORD(2,2),&wsd) != 0)
    {
        cout << "WSAStartup failed!" << endl;
        return 1;
    }
    //创建套接字
    sServer = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
    if(INVALID_SOCKET == sServer)
    {
        cout << "socket failed!" << endl;
        WSACleanup();//释放套接字资源
        return -1;
    }
    //服务器套接字地址
    addrServ.sin_family = AF_INET;
    addrServ.sin_port = htons(6666);
    addrServ.sin_addr.s_addr = INADDR_ANY;
    //绑定套接字
    retVal = bind(sServer,(LPSOCKADDR)&addrServ,sizeof(SOCKADDR_IN));
    if(SOCKET_ERROR == retVal)
    {
        cout << "bind failed!" << endl;
        closesocket(sServer);//关闭套接字
        WSACleanup();//释放套接字资源
        return -1;
    }
    //开始监听
    retVal = listen(sServer,1);
    if(SOCKET_ERROR == retVal)
    {
        cout << "listen failed!" << endl;
        closesocket(sServer);//关闭套接字
        WSACleanup();//释放套接字资源
        return -1;
    }
    //接受客户端请求
    sockaddr_in addrClient;
    int addrClientlen = sizeof(addrClient);
    sClient = accept(sServer,(sockaddr FAR*)&addrClient,&addrClientlen);
    if(INVALID_SOCKET == sClient)
    {
        cout << "accept failed!" << endl;
        closesocket(sServer);//关闭套接字
        WSACleanup();//释放套接字资源
        return -1;
    }
    while(true)
    {
        //接受客户端数据
        ZeroMemory(buf,BUF_SIZE);
        retVal = recv(sClient,buf,BUF_SIZE,0);
        if(SOCKET_ERROR == retVal)
        {
            cout << "recv failed!" << endl;
            closesocket(sServer);//关闭套接字
            WSACleanup();//释放套接字资源
            return -1;
        }
        if(buf[0] == '0')
        {
            break;
        }
        cout << "客户端发送的数据:" << buf << endl;
        cout << "向客户端发送数据:";
        cin >> sendBuf;
        send(sClient,sendBuf,strlen(sendBuf),0);
    }
    //退出
    closesocket(sServer);//关闭套接字
    closesocket(sClient);//关闭套接字
    WSACleanup();//释放套接字资源
    return 0;
}

Fehlermeldung:

C:UsersAdministrationDocumentsQtservermain.cpp:4: Warnung: #pragma-Kommentar [-Wunknown-pragmas] wird ignoriert
#pragma-Kommentar(lib,"ws2_32.lib")
C:UsersAdministrationDocumentsQtservermain.cpp:18: Fehler: undefiniert Verweis auf „_imp__WSAStartup@8“
C:UsersAdministrationDocumentsQtservermain.cpp:24: Fehler: undefinierter Verweis auf „_imp__socket@12“
C:UsersAdministrationDocumentsQtservermain.cpp:28: Fehler: undefinierter Verweis auf „_imp__WSACleanup@0“
C:UsersAdministrationDocuments Qtservermain . cpp:33: Fehler: undefinierter Verweis auf „_imp__htons@4“
C:UsersAdministrationDocumentsQtservermain.cpp:36: Fehler: undefinierter Verweis auf „_imp__bind@12“ @ 4'
C:UsersAdministrationDocumentsQtservermain.cpp:41: Fehler: undefinierter Verweis auf `_imp__WSACleanup@0'
C:UsersAdministrationDocumentsQtservermain.cpp:45: Fehler: undefinierter Verweis auf `_imp__listen@8'
C:UsersAdministrationDocumentsQtservermain.cpp:49: Fehler: undefinierter Verweis auf „_imp__closesocket@4“
C:UsersAdministrationDocumentsQtservermain.cpp:50: Fehler: undefinierter Verweis auf „_imp__WSACleanup@0“
C:UsersAdministrationDocumentsQtservermain.cpp:56: Fehler: undefinierter Verweis auf „_imp__accept@12“
C : UserAdministrationDocumentsQTServermain.CPP: 60: Fehler: UNSEFINED -Verweis auf _Imp__Closesocket@4 '
c: userAdMinDocumentsQTServermain.CPP: 61: Fehler: UNDEFINED REFING ZU _IMPNAGRAMMENDE 722. : Fehler : undefinierter Verweis auf „_imp__closesocket@4“
C:UsersAdministrationDocumentsQtservermain.cpp:73: Fehler: undefinierter Verweis auf „_imp__WSACleanup@0“
C:UsersAdministrationDocumentsQtserver main.cpp:83: Fehler: undefinierter Verweis auf „_imp__send@16“
C :UsersAdministrationDocumentsQtservermain.cpp:86: Fehler: undefinierter Verweis auf „_imp__closesocket@4“
C:UsersAdministrationDocumentsQtservermain.cpp:87: Fehler: undefinierter Verweis auf „_imp__closesocket@4“
C:UsersAdministrationDocumentsQtservermain.cpp:88: Fehler: undefinierter Verweis auf `_imp__WSACleanup@0'
collect2.exe:-1: Fehler: Fehler: ld hat 1 Exit-Status zurückgegeben
Es liegen Header-Dateifehler und Schlüsselwortfehler vor

高洛峰高洛峰2743 Tage vor1473

Antworte allen(1)Ich werde antworten

  • 大家讲道理

    大家讲道理2017-05-31 10:42:01

    winsock?
    不是给出了警告么?
    warning: ignoring #pragma comment [-Wunknown-pragmas]
    链接问题.
    你的qt的编译器配置的什么? mscv?

    如果选的是msvc 可以试试在.pro

    win32:LIBS += xxx.lib
    win32:QMAKE_POST_LINK += xxx.dll

    PS: qt有网络库的,可以通过qt +=network使用qt的网络库.

    Antwort
    0
  • StornierenAntwort