Я новичок в программировании сокетов на C/C++. Я написал Client and Server Socket. Они могут отправлять и получать строку. Идея состоит в том, чтобы отправить команды на сервер в строке. Он может выглядеть примерно так: «GET X» или «SET X 2». Я знаю, как я могу разделить строку. и программа знает, что первое слово в строке является командой, вторая - атрибутом, а третья может быть значением в случае SET-Command. Мой вопрос в том, как я могу сказать программе, что если она получает строку «GET X», она должна вызывать функцию get (attribute). Я думал о коммутаторе, но думаю, что это не лучшее решение для него. В случае, если будет много команд. THANK выc socket send команды в строке
ответ
Я думаю, что лучше использовать оператор switch.
Если нет, вы можете использовать карту с командной строкой в качестве ключа и указателем на функцию обратного вызова в качестве значения.
И убедитесь, что ключ существует, иначе программа может взорваться. – Marlon
Один из способов, которым вы могли бы это сделать, - иметь таблицу поиска функций, которую вы могли бы вызвать, в зависимости от команды, которая все вернула char*
, и отправить ответ обратно клиенту. Конечно, вы должны сделать рудиментарную функцию хэширования.
В основном вы можете свести проблему до оптимального способа сопоставления имени операции с вызываемой фактической функцией и действительно ли нужны решения с лучшими характеристиками поиска.
- Для небольшого числа функций может быть достаточно простого решения на основе
O(n)
(например, линейного поиска). - Подход на основе
O(log(n))
(например, self-balancing binary trees) может быть достаточным для дополнительных операций. - Большинство людей прыгают прямо на hash table на основе решения из-за теоретических характеристик поиска
O(1)
. Однако это зависит от хорошей хеш-функции, которая сама по себе не является бесплатной с точки зрения стоимости.
Всегда есть компромиссы во времени и пространстве. Так что лучше всего профилировать, прежде чем решать, какой подход лучше всего подходит для вашего приложения.
Независимо от того, что проблемы с отправкой операций были изучены в значительной степени. Например, вот one paper, где обсуждаются стратегии отправки операций в реализации ORB CORBA C++.
Помимо оптимизации работы поиск, вы, вероятно, приходится иметь дело с другими факторами, такими как:
- параллельности: это приложение требуется обрабатывать несколько соединений от клиентов параллельно? Распределенный параллелизм часто очень сложно реализовать правильно.
- Сериализация: как вы будете отправлять и получать данные по проводам? Проблемы вы можете столкнуться включают: отправка простого текста может быть медленными, численные значения могут должны быть преобразованы в приемных платформах endianness, ваши протоколы сериализации могут измениться, которые будут влиять на пользователь и т.д.
Есть потенциально много других проблемы, с которыми вам придется столкнуться и на стороне клиента.Если это вообще возможно, я бы рекомендовал использовать существующую RPC-подобную технологию, а не изобретать колесо самостоятельно.
- 1. C# Socket send receive network
- 2. C# Socket send string conversion
- 3. Raw socket NOT send
- 4. python socket send немедленно
- 5. RAW Socket send не работает
- 6. Socket send concurrency гарантирует
- 7. socket send() repeatable
- 8. socket send and retrieve
- 9. C++ socket send/recv vs write/read
- 10. C# send string array over socket
- 11. C++ win32 async socket client send() issue
- 12. Socket send and get txt file c
- 13. C# file read and send over socket
- 14. Lua socket client: send function
- 15. Send/Recv Socket Blocking Issues
- 16. socket send throws timeout error
- 17. .NET - Socket Send Not Blocking
- 18. Socket send() зависает, когда в состоянии CLOSE_WAIT
- 19. Swift Send Hex Data Over TCP Socket
- 20. send and recv C++
- 21. Socket C handle recv() и send() в то же время
- 22. Python Socket Send Buffer Vs. Str
- 23. python flask socket send call never returns
- 24. .NET C# socket send на двух разных потоках
- 25. Получение постоянной задержки между данными TCP Socket send C#
- 26. C++ socket send не передавать CR и LF
- 27. c socket: send() отправлять только 1 байт за один раз
- 28. erlang socket send timeout никогда не бывает
- 29. Socket sync send outperform async начинает/заканчивается?
- 30. log zmq socket instance send/recv?
Вы можете программировать либо на C, либо на C++, но не на обоих языках одновременно. Пожалуйста, используйте соответствующие теги и укажите, какой язык вы используете. –
Вы в основном используете удаленные вызовы процедур. Если вы не делаете это в образовательных целях, зачем изобретать колесо? Существует много технологий RPC, доступных на нескольких языках программирования. Краткий список этих технологий доступен здесь: http://en.wikipedia.org/wiki/Remote_procedure_call – Void
@Seth Carnegie Технически можно включать файлы C в проект C++, или, возможно, сервер и клиент находятся на разных языках , Ни одна из этих вещей не может быть здесь, но это возможности. – patrickvacek