Приветствую.Нужно передать по сети структуру такого вида:
#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.В чем может быть проблема?
Может проблема в том, что данные не туда записываются ПЕРЕД передачей?
>Может проблема в том, что данные не туда записываются ПЕРЕД передачей?
куда именно "не туда"? :)
Eсть предположение, что нужно recv()/send() вызывать в цикле, и проверять количество полученных/отправленных байтов.Или не туда копаю?
>>Может проблема в том, что данные не туда записываются ПЕРЕД передачей?
>куда именно "не туда"? :)
>Eсть предположение, что нужно recv()/send() вызывать в цикле, и проверять количество полученных/отправленных
>байтов.
>
>Или не туда копаю?Однажды у меня была похожая проблема при записи в файл. Как показало расследование, я перепутал поля в структуре на стадии ее заполнения. Когда увидел ваш постинг - сразу вспомнился ваш случай.
>Однажды у меня была похожая проблема при записи в файл. Как показало
>расследование, я перепутал поля в структуре на стадии ее заполнения. Когда
>увидел ваш постинг - сразу вспомнился ваш случай.
Спасибо за наводку. Еще раз внимательно просмотрел код и нашел эту ошибку.