Я работаю над написанием TCP-сервера с использованием Berkeely SOCKET API под Linux. Теперь у клиентов есть набор спецификаций, и каждое сообщение, отправленное клиентом, основано на тех спецификациях. I-e сообщение, отправленное с клиента, соответствует одной из многих структур, указанных спецификациями. Теперь сценарий заключается в том, что сервер не знает, какое сообщение клиент отправит в какое время. Как только мы получим сообщение, мы сможем выяснить, что это такое, но не до этого. Сообщения, отправленные клиентами, имеют переменную длину, поэтому мы не можем заранее знать, какое сообщение мы собираемся получить. Чтобы решить эту проблему я использовал следующий метод:Как правильно использовать recv() sys call
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;
}
Это прекрасно работает, но я просто хотел, чтобы подтвердить, что это подходящий метод или есть что-то другое, что может быть лучше чем это. Вся помощь очень ценится.
Спасибо.
Да, это то, чего я боюсь. Можете ли вы отправить решение? – Abdullah
См. Отредактированный ответ. –
Большое спасибо, теперь понятно, что делать :) cheers :) – Abdullah