#c #windows #pinvoke #winsock #sockets
#c #Windows #pinvoke #winsock #сокеты
Вопрос:
У меня небольшая путаница в отношении того, насколько низкоуровневый winsock? Я хочу написать ОЧЕНЬ простую клиент-серверную программу в Windows. Я действительно не хочу использовать раздутый TCP или даже UDP, просто что-то чрезвычайно простое и с низкой задержкой. Будет ли winsock идеальным для этого? Или winsock такой же, как сетевые функции Windows, просто все упаковано (и, возможно, медленнее)? Было бы лучше просто использовать PInvoke в собственных сетевых функциях Windows?
Комментарии:
1. TCP и UDP «раздуты»? Ты что, спятил? Далее вы собираетесь сказать, что IP слишком высокоуровневый.
2. Winsock довольно низкого уровня. Я бы не стал так быстро списывать UDP. Если вам нужен легкий / гибкий протокол, UDP — ваш человек (определенно легче, чем TCP). Какова альтернатива? Планируете ли вы писать свой собственный протокол по общему IP?
3. @Matt, «раздутый» был в TCP- TCP медленнее, потому что вы получаете избыточность, проверки, трехстороннее рукопожатие и т. Д
4. Я считаю, что функции Winsock просто позволяют вам обмениваться данными через UDP / TCP. Вы можете получить более низкий уровень, если хотите написать свой собственный драйвер сетевого устройства. Однако я думаю, что это противоположное направление, в котором вы хотите пойти…
5. Если это ваша цель, используйте UDP. Что мне нравится в UDP, так это то, что он «без подключения». Вы можете просто начать отправлять данные. Другая система может просто начать прослушивание. Он должен выполнить то, что вам нужно. Не опускайтесь до более низкого уровня, пока не поймете последствия. TCP и UDP отлично работают.
Ответ №1:
Winsock, TCP, UDP и любая хорошо принятая сетевая библиотека, построенная поверх них, будут сопоставимы по производительности.
Используйте тот, который проще всего выполнить.
Ответ №2:
Прежде всего, можно написать совершенно новый протокол без реализации сетевого драйвера. Для этого у вас есть необработанные сокеты. В настольных Windows они очень ограничены (найдите «ограничения»).
Это возможно, но не рекомендуется. Не изобретайте велосипед и не выбирайте между UDP и TCP, пока не будете полностью уверены, что вам нужно что-то более сложное (но не более простое).
Для отправки данных по сети (в отличие от прямой кабельной связи между двумя компьютерами) вам нужен протокол IP. Для отправки ваших данных в нужное приложение вам нужен транспортный протокол (UDP, TCP и другие). UDP — почти самый простой из возможных, потому что это была его основная цель проектирования. UDP предоставляет дополнительную адресацию (номер порта в дополнение к IP-адресу для доставки ваших данных в нужный сокет), границы пакетов (поле «длина») и необязательную контрольную сумму. Это все, и это минимальный список функций. Возьмите его и реализуйте все, что вам нужно, через UDP.
Далее, если вам нужно быть уверенным, что ваши пакеты доставляются, а не молча отбрасываются где-то по пути (надежность), доставляются в правильном порядке, если вы хотите знать, что кто-то все еще слушает вас на противоположном конце (подключение) и другие вещи, реализованные лучшими специалистами, с оборудованием, адаптированным кэта реализация, проверенная миллионами в течение десятилетий, с множеством документации, доступна практически на всех возможных платформах — используйте TCP.