Программирование сокетов - PullRequest
4 голосов
/ 29 декабря 2010

Это скорее общий вопрос. Но, как в C #, Python, C, C ++ ....... и т. Д.

Являются ли все основные сетевые программы "Сокеты" практически одинаковыми. Как все они используют сокеты Беркли (я думаю, так они называются) или у каждого языка есть свой собственный способ создания сокетов.

Спасибо

Ответы [ 4 ]

3 голосов
/ 29 декабря 2010

Сокеты зависят от платформы, а не от языка.Таким образом, linux использует только сокеты BSD, Windows предлагает как сокеты BSD (используемые почти исключительно), так и разновидность сокетов M $ (называемых WSA), но не знаю о других.Все сводится к тому, что находится под капотом - точнее на уровне ядра ОС.Найденная там реализация сокетов предложит первый набор API, чтобы сделать их доступными для ядра / пользовательского пространства - обычно через разделяемый объект / динамически связанную библиотеку и, таким образом, «изначально» поддерживающую языки c / c ++.Все остальные языки используют привязки к конкретным языкам для тех файлов SO / DLL, которые ОС предлагает для C / C ++.

HTH

1 голос
/ 29 декабря 2010

Сокеты в основном одинаковы в C, C ++, Java, Ruby.Они немного проще (потому что встроенные классы обрабатывают план котла) на языках более высокого уровня.Если вы можете написать код Socket на C, то вы можете сделать это где угодно, если у вас есть ссылка на перевод.

@ Kellogs поднимает хороший вопрос, у Windows есть собственный Socket API, который (обычно) работает лучшев моем опыте) на Windows, чем предлагаемые реализации Posix.API очень похожи.Я бы сделал аналогию OpenGL с DirectX.Если вы действительно знаете одно, то можете узнать другое с помощью ссылки.

0 голосов
/ 29 декабря 2010

Согласен с келлогами выше.Windows и большинство основных POSIX-совместимых ОС поддерживают базовый API сокетов BSD.В дополнение к сокету Berkeley каждая платформа предоставляет дополнительный собственный API для повышения производительности и масштабируемости.Эти расширенные API-интерфейсы не ограничиваются только сокетами - они работают с любыми операциями ввода-вывода (т. Е. С дисковыми файлами, именованными каналами и т. Д.).Например, (в дополнение к традиционным select () и poll ()) в Linux есть собственный механизм epoll, в BSD - kqueue, в Windows - API-интерфейсы WSAevent *, WSAaAsync * и I / O.Эти различия видны в основном на языках более низкого уровня, таких как C, C ++ или Pascal.

C #, Java, Python, Ruby et al.несколько «более высокий уровень» по сравнению с C - они предоставляют надежные технологии, чтобы изолировать вас от низкоуровневых API.Вместо непосредственного использования API сокетов, вы можете использовать расширенные библиотеки классов времени выполнения, предоставляемые для каждой платформы.Например, чтобы написать сервер TCP / IP на Python, вы можете просто использовать класс SocketServer .Аналогично в C # вы можете использовать WebClient для загрузки файлов в сети.В C ++ у вас есть библиотека Boost.Конечно, ничто не мешает вам использовать в своем приложении raw socket API напрямую .

0 голосов
/ 29 декабря 2010

В наши дни мы не различаем язык, библиотеку классов, к которой можно получить доступ, от языка и базовой операционной системы.Вот мое объяснение

C, C ++, C #, Java - только языки не имеют конкретной поддержки в отношении сетевого программирования.

Библиотека классов Java, .Net Framework, стандартная библиотека C ++ - я думаю, что C # & Java предоставляет некоторые классы для сетевого программирования.Стандартная библиотека C ++ не предоставляет никаких классов сетевого программирования (доступны только iostreams для файла, stdinput и строк).Но библиотека BOOST для C ++ предоставляет классы для сетевого программирования.Я не знаю о других библиотеках.

ОС - операционная система предоставляет базовый API (в основном на C), который используется библиотеками классов выше.В случае Windows это API Winsock (WSA), а в случае Unix - API BSD сокета.Я думаю, что windows также поддерживает в некоторой степени API BSD, так что кривая обучения меньше.Но, как сказал @EnabrenTane, это нечто большее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...