always getting crash issue when trying to receive string value from TCP Server-Client

37 Views Asked by At

i always getting crash issue when trying to receive string value from TCP Server-Client, can someone fix it??

struct request_data_t {
    int Mode;
    bool boolean;
    int value;
    std::string fileName;
    std::string content;
};

size_t TCPServer::receive(void *outData) {
    uint32_t length = 0;
    int code = receive_data(&length, sizeof(uint32_t));
    if (code > 0) {
        length = ntohl(length);
        receive_data(outData, static_cast<size_t>(length));
    }
    return length;
}

int TCPServer::receive_data(void *outData, size_t size) {
    char *buffer = static_cast<char *>(outData);
    int numReceived = 0;

    while (size) {
        do {
            numReceived = read(new_socket, buffer, size);
        } while (numReceived == -1 && errno == EINTR);

        if (numReceived <= 0) {
            close(server_fd);
            break;
        }

        size -= numReceived;
        buffer += numReceived;
    }
    return numReceived;
}

size_t TCPServer::send(void *inData, size_t size) {
    uint32_t length = htonl(size);
    int code = send_data(&length, sizeof(uint32_t));
    if(code <= 0){

        return 0;
    }
    return send_data(inData, size);
}

size_t TCPServer::send_data(void *inData, size_t size) {
    char *buffer = static_cast<char *>(inData);
    int numSent = 0;

    while (size) {
        do {
            numSent = write(new_socket, buffer, size);
        } while (numSent == -1 && errno == EINTR);

        if (numSent <= 0) {
            close(server_fd);
            break;
        }

        size -= numSent;
        buffer += numSent;
    }
    return numSent;
}

void TCPServer::SendData(int Mode, bool boolean, int value, const char* fileName, const char* content) {

    request_data_t request{};
    request.Mode = Mode;
    request.boolean = boolean;
    request.value = value;

    request.fileName = fileName;
    request.content = content;

    send((void*)&request,sizeof(request));
}

i want it able to send string value and then able to receive the string, i want the result looks like this

TCPServer server; server.SendData(11, true, 20, "test.txt", "hello");

TCPClient client;

request_data_t2 received_data; client.receive((void *)&received_data);

LOGD("fileName: %s", received_data.fileName.c_str()); // but always crash here when i try to call received_data.fileName and received_data.content

0

There are 0 best solutions below