Я вижу много вопросов по теме сетевого программирования. Несмотря на все вопросы и ответы, я просто не знаю, какой путь лучше всего начать. Лучше ли начинать с самого низкого уровня или сразу работать в .NET C#, не вдаваясь в подробности ниже абстракции? Лучше ли работать с Winsock или BSD Socket в Linux?Сетевое программирование Низкий уровень или класс абстракции?
ответ
Вы все еще можете выполнять низкоуровневое TCP или UDP-программирование на C#, поэтому на данный момент это действительно вопрос выбора, хотите ли вы написать сетевой код на C, C# и т. Д. Если вы все пытаясь понять, как писать сетевой код, я бы рассмотрел язык больше личного выбора, поскольку основные сетевые концепции остаются прежними.
.NET C#
У вас есть:
- низкий уровень API для работы с TCP, UDP и т.д.
- .NET Remoting
- WCF (HTTP, TCP, именованные каналы , МСМК)
Я бы повторно оценил последний вариант, но зависит от того, что вы пытаетесь изучить: для создания распределенных приложений или подробных подробностей низкоуровневого API сокетов.
У меня есть идея создать программу для мониторинга сети, что-то вроде этого. –
Вы можете сделать это на C# в основном. Для очень конкретных ситуаций, если вам нужен метод, который отсутствует в .NET Framework, вы можете использовать PInvoke для его вызова. –
Все зависит от ваших существующих навыков программирования. Я бы не начинал с более низких уровней, таких как класс Socket
(или TcpClient
/UdpClient
), не имея хотя бы базового понимания асинхронного программирования.
Многие люди, которые начинают с программирования сокетов, запускают отдельный поток для чтения после блокировки метода Read. Это очень неэффективный способ решить проблему, особенно на серверах. BeingRead/EndRead - это путь.
Вперед разрабатывает протокол передачи, поскольку TCP не гарантирует, что полное сообщение будет доставлено по одному. Это гарантирует, что ваши сообщения поступают в правильном порядке.
Следующая важная задача с программированием сокетов - обработать входящие данные. Ошибка новичка заключается в том, чтобы начать добавлять строки, которые приведут к большому количеству использования памяти в серверных приложениях. Для управления входящими данными используйте буферы byte[]
и пул буферов для управления входящими данными (это должна быть простая задача, если вы создали хорошо разработанный протокол).
Как вы можете видеть, это довольно большая задача, чтобы не обходиться без опыта. WCF - это гораздо лучший вариант, поскольку он обрабатывает большую часть этого материала для вас.
- 1. Каков абсолютный низкий уровень абстракции «рисования» в GNU/Linux?
- 2. Сетевое программирование?
- 3. Сетевое программирование в Python
- 4. Проектирование OS уровень абстракции
- 5. Уровень абстракции (Java)
- 6. JDBC и уровень абстракции
- 7. Linux \ BSD Сетевое программирование
- 8. C Сетевое программирование - Winsock
- 9. Сетевое программирование с C#
- 10. Сетевое программирование абстракция, разложение
- 11. Delphi Сетевое программирование
- 12. Сетевое программирование в python
- 13. Дизайн шаблона: C++ Уровень абстракции
- 14. Сетевое программирование: поддерживать сокеты или нет?
- 15. Сетевое программирование - Приложения Связь
- 16. Слишком низкий уровень AudioQueue
- 17. Низкий уровень Singleton Instance
- 18. Низкий уровень печати
- 19. Низкий уровень KeyBoardStruct
- 20. низкий уровень Hooker
- 21. Android Низкий уровень доступа
- 22. Низкий уровень SQL-запрос
- 23. Unix Сетевое программирование Разъяснение
- 24. Сетевое программирование в python
- 25. Функция C, Сетевое программирование
- 26. java сетевое программирование
- 27. Сетевое программирование UdP пакет
- 28. Android Сетевое программирование
- 29. C11 сетевое программирование
- 30. Сетевое программирование Язык D
Какова цель вашей системы? –
Я просто хочу узнать, это моя цель. –
, если вы хотите учиться ради того, чтобы иметь возможность делать персонал в сети, вы не знаете, что такое низкий уровень, вы можете использовать C# для простого персонала. если вы хотите реализовать протокол, тогда перейдите к rfc протокола и попробуйте реализовать его простые части. – none