Как безопасно передать 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;
}
Вы используете длинные версии ntohl()
а также htonl()
когда вы должны использовать короткие версии ntohs()
а также htons()
,
Совет для профессионалов: убедитесь, что вы проверили возвращаемое значение write () и recv () (и рассмотрите возможность использования write () с read () или send () с recv (), так как это более обычные пары).