Я нахожусь в процессе написания TCP-сервера с использованием Berkely SOCKET API под Linux.Теперь клиенты имеют набор спецификаций, и каждое сообщение, отправляемое клиентом, основано на этих спецификациях, т.е. сообщение, отправленное клиентом, соответствует одной из многих структур, указанных в спецификациях.Теперь сценарий таков, что сервер не знает, какое сообщение клиент будет отправлять в какое время.Как только мы получим сообщение, мы можем выяснить, что это такое, но не раньше.Сообщения, отправляемые клиентами, имеют переменную длину, поэтому мы не можем заранее знать, какое сообщение мы собираемся получить.Чтобы решить эту проблему, я использовал следующий метод:
const char *buf[4096] = { 0 };
if ( recv (connected, buf, 4096, 0) == -1)
{
printf ("Error in recvng message\n");
exit (-1);
}
То есть я использую буфер по умолчанию размером 4096 (ни одно сообщение от клиента не может быть больше этого размера).получить в этом буфере, а затем я проверяю тип сообщения и предпринимаю соответствующее действие следующим образом:
struct ofp_header *oph;
oph=(struct ofp_header *)buf;
switch (oph->type)
{
case example_pkt:
handle_example_pkt();
break;
}
Это работает нормально, но я просто хотел подтвердить, что это подходящий метод или есть что-то еще, чтоможет быть лучше, чем это.Вся помощь очень ценится.
Спасибо.