Rumah  >  Soal Jawab  >  teks badan

Bagaimanakah program C++ yang ditulis dalam vs2017 boleh disalin ke Qt Creator tanpa melaporkan ralat?

Ini adalah sekeping kod yang saya temui dalam talian Tidak ada masalah untuk meletakkannya dalam vs2017. Kebanyakan fail pengepala tidak boleh digunakan dalam Qt, dan beberapa kata kunci tidak boleh digunakan dalam Qt Ralat dan amaran akan diprogramkan di bawah tetingkap.

#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;
}

Mesej ralat:

C:UsersAdministrationDocumentsQtservermain.cpp:4: amaran: mengabaikan komen #pragma [-Wunknown-pragmas]
#pragma comment(lib,"ws2_32.lib")
C:UsersAdministrationDocumentscpp:1defined8. rujukan kepada `_imp__WSAStartup@8'
C:UsersAdministrationDocumentsQtservermain.cpp:24: error: undefined reference to `_imp__socket@12'
C:UsersAdministrationDocumentsQtservermain.cpp:28:undefined reference to `_imp__socket@12'
C:UsersAdministrationDocumentsQtservermain.cpp:28:undefined_referensi: UsersAdministrationDocuments Qtservermain .cpp:33: ralat: rujukan tidak ditentukan kepada `_imp__htons@4'
C:UsersAdministrationDocumentsQtservermain.cpp:36: error: undefined reference to `_imp__bind@12'
C:UsersAdministrationDocumentsQtservermain.cpp:36: error: undefined reference to `_imp__bind@12'
C:UsersAdministrationDocumentsQt:unreferenced_users soket @ 4'
C:UsersAdministrationDocumentsQtservermain.cpp:41: error: undefined reference to `_imp__WSACleanup@0'
C:UsersAdministrationDocumentsQtservermain.cpp:45: ralat: undefined reference tolisten `_Qtserver'imp .cpp:49: ralat : rujukan tidak ditentukan kepada `_imp__closesocket@4'
C:UsersAdministrationDocumentsQtservermain.cpp:50: error: undefined reference to `_imp__WSACleanup@0'
C:UsersAdministrationDocumentsQtservermain.cpp:50: error:undefined reference to `_imp__WSACleanup@0'
C:UsersAdministrationDocumentsQtserver6main.cpp:undefined .
C : UsersAdministrationDocumentsQtservermain.cpp:60: error: undefined reference to `_imp__closesocket@4'
C:UsersAdministrationDocumentsQtservermain.cpp:61: ralat: undefined reference to `_imp__WSACleanup@_mp__'cDocuments mentsQtservermain.cpp:72: ralat : rujukan tidak ditentukan kepada `_imp__closesocket@4'
C:UsersAdministrationDocumentsQtservermain.cpp:73: error: undefined reference to `_imp__WSACleanup@0'
C:UsersAdministrationDocumentsQtservermain.cpp:73: error: undefined reference to `_imp__WSACleanup@0'
C:UsersAdministrationDocumentsQtserver main.cpp:8@3 : 6 undefined reference to`undefined __
C :UsersAdministrationDocumentsQtservermain.cpp:86: error: undefined reference to `_imp__closesocket@4'
C:UsersAdministrationDocumentsQtservermain.cpp:87: ralat: undefined reference to `_imp__closesocket@4':Dosministration_Us ralat: rujukan tidak ditentukan kepada `_imp__WSACleanup@0'
collect2.exe:-1: ralat: ralat: ld mengembalikan 1 status keluar
Terdapat ralat fail pengepala dan ralat kata kunci

高洛峰高洛峰2669 hari yang lalu1385

membalas semua(1)saya akan balas

  • 大家讲道理

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

    winsock?
    Tidakkah ia memberi amaran?
    amaran: mengabaikan komen #pragma [-Wunknown-pragmas]warning: ignoring #pragma comment [-Wunknown-pragmas]
    链接问题.
    你的qt的编译器配置的什么? mscv?

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

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

    PS: qt有网络库的,可以通过qt +=networkMasalah pautan.

    Apakah konfigurasi pengkompil qt anda?🎜 🎜Jika anda memilih msvc, anda boleh mencubanya dalam .pro🎜 rrreee 🎜PS: Jika qt mempunyai pustaka rangkaian, anda boleh menggunakan pustaka rangkaian qt melalui qt +=network.🎜

    balas
    0
  • Batalbalas