Recv () на сокете () не получает как-то (встроенный Linux c / c ++) - PullRequest
1 голос
/ 04 февраля 2012

В настоящее время у меня есть клиент-серверная реализация кода C.Я много сделал, чтобы следить за различными книгами и реализациями, и в конечном итоге это не работает.

Ссылаясь на приведенные ниже операторы "printf", я могу сказать, что клиент успешно отправляет сообщение, но сервер никогда не проходит этап приема (даже после того, как клиент предположительно преуспел в отправке).

Так что в конечном итоге у меня складывается впечатление, что что-то связано с тем, как мой сервер получает код, или с форматированием того, что я отправляю (когда я говорю это, я имею в виду, что мне, возможно, не хватает \ 0 или \ r\ n или что-то еще, хотя я считаю, что я включаю их совершенно анально).

Вот соответствующий код с очень удаленным:

SERVER:

int Server::update(char *getbuf)
{

...

// ACCEPT
        clientsocket = accept(serversocket, (struct sockaddr *)&client_address, &alen);
if(!clientsocket)
            logger.fail("Accept Fail");
else
logger.info("Accept succeed");


    z = recv (clientsocket, sbuf, sSize, MSG_DONTWAIT);


    snprintf(&sbuf[z], sSize-z, "\r\n\0");


    snprintf(getbuf, sSize, sbuf);


    logger.data("Received: %s",sbuf);       

        respond(getbuf);

        return TRUE;
    }

returnFALSE;
}


void Server::respond(char *response)
{
// SEND
ssize_t z;
    int sSize = 64;
    char sbuf[sSize];


    snprintf(sbuf, sSize, response);
    snprintf(&sbuf[z], sSize-z, "\r\n\0");


    z = send(clientsocket, sbuf, sSize, 0);
    if (z < 0)
fprintf(stderr,"send failure\n");
    else
logger.info("Send Succeed");
}

CLIENT

Code:

int main(int argc, char **argv)
{
...

    z = connect(com_socket, (struct sockaddr *) &server_address, sizeof(server_address));
    if(z == -1)
    {
        if(errno == EINPROGRESS)
        {
            fprintf(stderr, "EINPROGRESS non block start\n");
        }

        if(errno == EALREADY)
        {
            fprintf(stderr, "EALREADY non block subsequent request\n");
        }

        fprintf(stderr, "Connect failed\n");
    }
    else 
    printf("Connect Success\n");


    int sSize = 64;
    char sbuf[sSize];


    z = snprintf(sbuf, sSize, command);
        snprintf(&sbuf[z], sSize-z, "\r\n\0");


// SEND
    z = send(com_socket, sbuf, sSize, 0);
    if (z < 0)
        fprintf(stderr,"send failure\n");
    else
    printf("Send Succeeded\n");

// READ
    z = recv(com_socket, sbuf, sSize, MSG_DONTWAIT);
    if (z < 0)
        fprintf(stderr,"receive failure\n");
    else
    printf("Receive Succeeded\n");

    snprintf(&sbuf[z], sSize-z,"\r\n\0");


// Output
    printf("Received Response: %s\n", sbuf);

    close(com_socket);

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