Я застрял с проблемой чтения байтов на моем сервере сокетов C tcp, который получает запрос от клиента python. У меня есть следующая структура в качестве моего шаблона получения
struct ofp_connect {
uint16_t wildcards; /* identifies ports to use below */
uint16_t num_components;
uint8_t pad[4]; /* Align to 64 bits */
uint16_t in_port[0];
uint16_t out_port[0];
struct ofp_tdm_port in_tport[0];
struct ofp_tdm_port out_tport[0];
struct ofp_wave_port in_wport[0];
struct ofp_wave_port out_wport[0];
};
OFP_ASSERT(sizeof(struct ofp_connect) == 8);
Я могу правильно прочитать первые два 32-битных поля, но моя проблема заключается в том, что in_port[0] после поля заполнения кажется неправильным. То, как его в настоящее время читают,
uint16_t portwin, portwout, * wportIN;
wportIN = (uint16_t*)&cflow_mod->connect.in_port; //where cflow_mod is the main struct which encompasses connect struct template described above
memcpy(&portwin, wportIN, sizeof(portwin) );
DBG("inport:%d:\n", ntohs(portwin));
к сожалению, это не дает мне ожидаемого номера порта. Я могу проверить в wirehark, что клиент отправляет правильный формат пакета, но я чувствую, что то, как я читаю входящий/исходящий порт, неверно. Или это из-за того, как python отправляет данные? Можете ли вы дать несколько советов о том, где и почему я ошибаюсь? Заранее спасибо.
struct ofp_connect
? Значенияin_port
иout_port
имеют длину 0 байтов (т.е. для них не выделяется место). - person lurker   schedule 19.08.2013