URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 4855
[ Назад ]

Исходное сообщение
"проблема с recv()"

Отправлено roman , 18-Ноя-05 05:20 
Приветствую.

Нужно передать по сети структуру такого вида:

#define BUF 30

/* client message */
typedef struct msg_s {
    int msg_type;                    /* message type: MSG_REQ, MSG_REPLY */
    int msg_rc;                      /* reply code */
    char msg_id[BUF];
    char msg_passwd[BUF];
} msg_t;

struct sockaddr_in serv_addr;
...
/* here is 'hp' filled */

/* zero out structure */
memset(&serv_addr, 0, sizeof serv_addr);

/* fill in structure */
serv_addr.sin_family = AF_INET;
memcpy(&serv_addr.sin_addr, hp->h_addr, hp->h_length);
serv_addr.sin_port = htons(port);

/* create socket based on TCP */
if ( (sd = socket(AF_INET, SOCK_STREAM, 0)) < 0 ) {
    perror("socket() error!");
    exit(EXIT_FAILURE);
}
...
/* send buffer to server */
if ( send(sd, m, sizeof(msg_t), 0) == -1 ) {
    perror("send() error");
    exit(EXIT_FAILURE);
}

Соединение устанавливается успешно, но вот данные структуры передаются странным
образом: msg_type и msg_rc в порядке, а msg_passwd и msg_id как бы в перевернутом
виде, то есть если отправитель посылает user1\0\0\0\0\0\0, то получатель
получит \0\0\0\0\0\0user1.

В чем может быть проблема?


Содержание

Сообщения в этом обсуждении
"проблема с recv()"
Отправлено dimus , 18-Ноя-05 07:20 
Может проблема в том, что данные не туда записываются ПЕРЕД передачей?

"проблема с recv()"
Отправлено roman , 18-Ноя-05 07:27 
>Может проблема в том, что данные не туда записываются ПЕРЕД передачей?
куда именно "не туда"? :)
Eсть предположение, что нужно recv()/send() вызывать в цикле, и проверять количество полученных/отправленных байтов.

Или не туда копаю?


"проблема с recv()"
Отправлено dimus , 18-Ноя-05 10:53 
>>Может проблема в том, что данные не туда записываются ПЕРЕД передачей?
>куда именно "не туда"? :)
>Eсть предположение, что нужно recv()/send() вызывать в цикле, и проверять количество полученных/отправленных
>байтов.
>
>Или не туда копаю?

Однажды у меня была похожая проблема при записи в файл. Как показало расследование, я перепутал поля в структуре на стадии ее заполнения. Когда увидел ваш постинг - сразу вспомнился ваш случай.


"проблема с recv()"
Отправлено roman , 19-Ноя-05 05:36 
>Однажды у меня была похожая проблема при записи в файл. Как показало
>расследование, я перепутал поля в структуре на стадии ее заполнения. Когда
>увидел ваш постинг - сразу вспомнился ваш случай.
Спасибо за наводку. Еще раз внимательно просмотрел код и нашел эту ошибку.