Как отправить int16_t через TCP-сокет?

Как безопасно передать int16_t на C ++ TCP-сокет? В следующем коде сервер, кажется, не получает правильные значения, и я предполагаю, что это потому, что htonl / ntohl не определены для int16_t.

Клиент:

void client(int16_t value, int socket) {
int16_t _value = htonl(value);
write(socket, _value, sizeof(int16_t));
}

Сервер:

int16_t server(int16_t buf, int16_t value, int socket) {
recv(socket,&buf,sizeof(int16_t));
value = ntohl(buf);
return value;
}

0

Решение

Вы используете длинные версии ntohl() а также htonl() когда вы должны использовать короткие версии ntohs() а также htons(),

Совет для профессионалов: убедитесь, что вы проверили возвращаемое значение write () и recv () (и рассмотрите возможность использования write () с read () или send () с recv (), так как это более обычные пары).

3

Другие решения


По вопросам рекламы [email protected]