Невозможно преобразовать 'in_addr *' в 'LPCSTR {aka const char *}' для аргумента '2' в 'INT inet_pton (INT, LPCSTR, PVOID)' - PullRequest
0 голосов
/ 18 июня 2020

Я хотел создать TCP-сервер в QT-Creator. Я использовал код 1 к 1 из этого видео: https://www.youtube.com/watch?v=WDn-htpBlnU&t=1327s

В нескольких IDE, таких как Visual Studio Code, это работало нормально, но теперь из-за моей работы мне пришлось перейти на QT -Создатель. Но здесь строка

inet_pton(AF_INET, &client.sin_addr, host, NI_MAXHOST);

выдает исключение, которого я не знаю и как это исправить. Вот сообщение об ошибке:

C:\Users\****\Documents\Projects\MyProject\Server.cpp:56: Error: cannot convert 'in_addr*' to 'LPCSTR {aka const char*}' for argument '2' to 'INT inet_pton(INT, LPCSTR, PVOID)'
inet_pton(AF_INET, &client.sin_addr, host, NI_MAXHOST);
                                                     ^

Ребята, у вас есть идеи? : / Вот мой код. Строка, которая вызывает ошибку, находится посередине кода, с комментариями:

#define _WIN32_WINNT _WIN32_WINNT_WIN8
#include <Ws2tcpip.h>
#include <iostream>
#include <string>
#pragma comment (lib, "ws2_32.lib")

using namespace std;

void startServer() {

    // Initialze winsock
    WSADATA wsData;
    WORD ver = MAKEWORD(2, 2);

    int wsOk = WSAStartup(ver, &wsData);
    if (wsOk != 0) {
        cout << "Can't Initialize winsock! Quitting" << endl;
        return;
    }

    // Create a socket
    SOCKET listening = socket(AF_INET, SOCK_STREAM, 0);
    if (listening == INVALID_SOCKET) {
        cout << "Can't create a socket! Quitting" << endl;
        return;
    }

    // Bind the ip address and port to a socket
    sockaddr_in hint;
    hint.sin_family = AF_INET;
    hint.sin_port = htons(54000);
    hint.sin_addr.S_un.S_addr = INADDR_ANY;

    bind(listening, (sockaddr*)&hint, sizeof(hint));

    // Tell Winsock the socket is for listening
    listen(listening, SOMAXCONN);

    // Wait for a connection
    sockaddr_in client;
    int clientSize = sizeof(client);

    SOCKET clientSocket = accept(listening, (sockaddr*)&client, &clientSize);

    char host[NI_MAXHOST];      // Client's remote name
    char service[NI_MAXSERV];   // Service (i.e. port) the client is connect on

    ZeroMemory(host, NI_MAXHOST); // same as memset(host, 0, NI_MAXHOST);
    ZeroMemory(service, NI_MAXSERV);

    if (getnameinfo((sockaddr*)&client, sizeof(client), host, NI_MAXHOST, service, NI_MAXSERV, 0) == 0) {
        cout << host << " connected on port " << service << endl;
    }
    else {





        //Here is the line which throws the error:
        inet_pton(AF_INET, &client.sin_addr, host, NI_MAXHOST);





        cout << host << " connected on port " << ntohs(client.sin_port) << endl;
    }

    // Close listening socket
    closesocket(listening);

    // While loop: accept and echo message back to client
    char buf[4096];

    while (true) {
        ZeroMemory(buf, 4096);

        // Wait for client to send data
        int bytesReceived = recv(clientSocket, buf, 4096, 0);
        if (bytesReceived == SOCKET_ERROR) {
            cerr << "Error in recv(). Quitting" << endl;
            break;
        }

        if (bytesReceived == 0) {
            cout << "Client disconnected " << endl;
            break;
        }

        cout << string(buf, 0, bytesReceived) << endl;

        // Echo message back to client
        send(clientSocket, buf, bytesReceived + 1, 0);
    }

    // Close the socket
    closesocket(clientSocket);

    // Cleanup winsock
    WSACleanup();

    system("pause");
}

Большое спасибо за помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...