Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

C++ и сеть

55K
19 февраля 2010 года
T@Rak0t
4 / / 19.01.2010
В каких книгах или на каких сайтах, в общем какие информационные источники помогут разобраться в работе C++ с сетью и сетевыми протоколами
282
19 февраля 2010 года
Bard
481 / / 26.02.2006
C++ тут (в сетевых протоколах и работе с сетью) непричем. Если под винду - рой в сторону winsock. И вообще гугл рулит.
1.8K
19 февраля 2010 года
igor_nf
256 / / 13.12.2006
Цитата: Bard
C++ тут (в сетевых протоколах и работе с сетью) непричем. Если под винду - рой в сторону winsock. И вообще гугл рулит.



Как раз таки С++ причём. Лучше использовать библиотеки, независящие от ОС, чем писать на ОС API.

Автору: запрос в гугл "C++ network" выдаёт кучу ссылок по теме. И читайте литературу по TCP/IP. В принципе и в Windows и в Linux используется интерфейс сокетов для работы с сетью.

5
20 февраля 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: igor_nf
Лучше использовать библиотеки, независящие от ОС, чем писать на ОС API.

Лучше для кого? ;)
Сокеты - они что в виндовсе, что в линкусе одинаково выглядят, так что не зачет.

1.8K
20 февраля 2010 года
igor_nf
256 / / 13.12.2006
Цитата: hardcase
Лучше для кого? ;)



Для кроссплатформенных приложений ;)

Цитата:

Сокеты - они что в виндовсе, что в линкусе одинаково выглядят, так что не зачет.



Так о чём и было сказано выше. Где незачёт ?

1.8K
20 февраля 2010 года
igor_nf
256 / / 13.12.2006
Цитата: hardcase
Сокеты - они что в виндовсе, что в линкусе одинаково выглядят, так что не зачет.



Прямо таки одинаково ? И один и тот же код с использованием сокетов и в винде и в линуксе будет компилироваться и правильно исполняться ? Не верю. :)

5
20 февраля 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: igor_nf
Прямо таки одинаково ? И один и тот же код с использованием сокетов и в винде и в линуксе будет компилироваться и правильно исполняться ? Не верю. :)


Формально стандартные функции идентичны (иначе они не были бы стандартными). Вот документация для bind из MSDN, и первая ссылка из гугла на ман по bind. Понятно, что в виндовс он базируется на winsock2, но человеку же нужно не кроссплатформенные программы писать, а с мат-частью ознакомиться. ;)
Хотя конечно, это уже оффтоп пошел.

55K
20 февраля 2010 года
T@Rak0t
4 / / 19.01.2010
Цитата: Bard
C++ тут (в сетевых протоколах и работе с сетью) непричем. Если под винду - рой в сторону winsock. И вообще гугл рулит.


начал разбираться в них, вроде все нормально, но вот одно только не понятно, есть функция

 
Код:
SOCKET socket (int af, int type, int protocol);

и во всех, найденных мной источниках что параметр
 
Код:
protocol
можно задать равным 0, но нет описания для чего он служит вообще и какие значения может принимать
5
20 февраля 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: T@Rak0t
начал разбираться в них, вроде все нормально, но вот одно только не понятно, есть функция
 
Код:
SOCKET socket (int af, int type, int protocol);
и во всех, найденных мной источниках что параметр
 
Код:
protocol
можно задать равным 0, но нет описания для чего он служит вообще и какие значения может принимать


http://msdn.microsoft.com/en-us/library/ms740506%28VS.85%29.aspx

16K
20 февраля 2010 года
asmforce
186 / / 05.01.2010
Цитата: T@Rak0t
В каких книгах или на каких сайтах, в общем какие информационные источники помогут разобраться в работе C++ с сетью и сетевыми протоколами




Может winsock тебе и нужен, но для кроссплатформенных приложений советую Qt! Это не только сеть, а полнофункциональный кроссплатформенный framework! Для С++ программиста просто чудо!:)
Интересует?

55K
20 февраля 2010 года
T@Rak0t
4 / / 19.01.2010
Пока еще не думаю что мое "приложение" будет кросс платформенным, но ознакомится с этим не мешает мне
350
21 февраля 2010 года
cheburator
589 / / 01.06.2006
В качестве образца: кушай вот такой код (расширение измени на .rar).
Файлы sock.h и sock.cpp.
444
24 февраля 2010 года
patison
323 / / 15.03.2007
Товарищ автор. Настоятельно рекомендую воспользоваться чем-нибудь кросс-платформеным.
Конечно мат.часть по сокетам и протоколам коммуникаций лишней не будет. Но реализовывать советую на базе кроссп-платформенной либы какой-нибудь.

Не так давно писал клиент/сервер для передачи файлов по сети. Писал под линуксом, и ессна юзал линуксовые либы для работы с сокетами. Когда всё потестил на локалхосте, то понял что тестить на разных тачках не получится, т.к. все вокруг меня сидят на венде. Только тогда я понял, насколько гибко было-бы написать платформо-независимый код.

Если всё-таки решите на винсоке писать, можете почитать про мой скромный опыт, в написании клиент/сервера вот тут - http://codermd.blogspot.com/2007/08/tcpip.html. Статья правда писалась более двух лет назад, и на оригинальность особо не претендует.
32K
05 марта 2010 года
marazmaticus
8 / / 16.12.2007
В С++ Builder 6 есть готовые комп. для этого - FastNet к примеру (если опыта программирования мало - самое то)
58K
07 марта 2010 года
im.valdik
3 / / 06.03.2010
Цитата: hardcase
Лучше для кого? ;)
Сокеты - они что в виндовсе, что в линкусе одинаково выглядят, так что не зачет.



hardcase, видимо опыта межплатформенного использования сокетов у тебя не много. Так что незачет тебе :) Не вводи человека в заблуждение!

Создать сокет, и создать полноценное сетевое приложение это разные вещи.

T@Rak0t, если вкратце тебе надо определится какую модель приложения ты будешь строить. Простейший способ это по одному блокирующему сокету на нить (thread). Блокирующие сокеты довольно просты в использовании, но хороший сервер на них не построишь. Не блокирующие (non-blocking) сокеты позволяют построить реактивную модель, когда в одном потоке обрабатывается сразу много сокетов и события с ними происходящие опрашиваются select'ом, poll'ом, epoll'ом... В Window также есть возможность использования асинхронных сокетов через I/O Completion Ports

Сразу скажу что во всем разобраться не так просто, много подводных камней :) Но существует хорошая библиотека, совмещающая скорость и маштабируемость асинхронных сокетов, с довольно простым интерфейсом, и содержащая даже 3 примера простейшего HTTP сервера, это boost::asio :)

58K
07 марта 2010 года
im.valdik
3 / / 06.03.2010
Цитата: hardcase
Лучше для кого? ;)
Сокеты - они что в виндовсе, что в линкусе одинаково выглядят, так что не зачет.



hardcase, видимо опыта межплатформенного использования сокетов у тебя не много. Так что незачет тебе :) Не вводи человека в заблуждение!

Создать сокет, и создать полноценное сетевое приложение это разные вещи.

T@Rak0t, если вкратце тебе надо определится какую модель приложения ты будешь строить. Простейший способ это по одному блокирующему сокету на нить (thread). Блокирующие сокеты довольно просты в использовании, но хороший сервер на них не построишь. Не блокирующие (non-blocking) сокеты позволяют построить реактивную модель, когда в одном потоке обрабатывается сразу много сокетов и события с ними происходящие опрашиваются select'ом, poll'ом, epoll'ом... В Window также есть возможность использования асинхронных сокетов через I/O Completion Ports

Сразу скажу что во всем разобраться не так просто, много подводных камней :) Но существует хорошая библиотека, совмещающая скорость и маштабируемость асинхронных сокетов, с довольно простым интерфейсом, и содержащая даже 3 примера простейшего HTTP сервера, это boost::asio :)

1.8K
19 марта 2010 года
Arkady
153 / / 18.12.2007
Подозреваю, что вопрос тупой, но, как водится, если заблудился, то в 3х соснах.

Решил попробовать socket-ы на вкус. В инете информации валом.

 
Код:
SOCKET s_serv;
        s_serv = socket(AF_INET, SOCK_STREAM, 0);

Возвращает мне -1, GetLastError говорит, что это: 10093.
Т.е. WSANOTINITIALISED.

Хотя я и не лезу в особенности винсока и функции WSA знать не хочу.

Забавно, но с такой ерундой в инете особо никто не сталкивался, как-то создание сокета у всех проходит. А я даже не знаю, куда копать, поскольку функция не моя, параметры все определил не я, и вообще мне не ясно, почему то, что у всего мира, любых самых последних чайников всегда работает, а у меня - нет.
5
20 марта 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: Arkady

Решил попробовать socket-ы на вкус. В инете информации валом.

 
Код:
SOCKET s_serv;
        s_serv = socket(AF_INET, SOCK_STREAM, 0);
Возвращает мне -1, GetLastError говорит, что это: 10093.
Т.е. WSANOTINITIALISED.

Хотя я и не лезу в особенности винсока и функции WSA знать не хочу.


Читаем http://msdn.microsoft.com/en-us/library/ms740506%28VS.85%29.aspx
Особенно то место где

Цитата:
WSANOTINITIALISEDA successful WSAStartup call must occur before using this function.

1.8K
20 марта 2010 года
Arkady
153 / / 18.12.2007
Цитата: hardcase
Читаем http://msdn.microsoft.com/en-us/library/ms740506%28VS.85%29.aspx
Особенно то место где



Да, это помогает, только почему-то об этом ни слова ни в одном примере сервера (и там где указано, что они под винду), и это совершенно нелогично, я думал вызов WSAStartup должен быть внутри socket вшит, ведь иначе программа сходу теряет переносимость, и зачем тогда вообще линуксовый синтаксис было поддерживать?

5
20 марта 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: Arkady
иначе программа сходу теряет переносимость, и зачем тогда вообще линуксовый синтаксис было поддерживать?


 
Код:
void init(void) {
#ifdef WINDOWS
    WSAStartup(....)
#endif
#ifdef LINUX
    somthother(....)
#endif
}
58K
21 марта 2010 года
cvetik_kof
2 / / 21.03.2010
Необходимо подключится к сайту через сокеты,как это лучьше сделать - сайт янекс. Необходимо написать клиентскую часть только? но в летературе написано,что должно быть две точки соединения клиент-сервер. Подскажите как это организовать???
444
22 марта 2010 года
patison
323 / / 15.03.2007
Всё правильно - должно быть две точки - клиент/сервер. Но в вашем случае в качестве сервера выступает сайт яндекс (сервак на котором он находится). Потому вам достаточно написать клиент-приложение.
14
22 марта 2010 года
Phodopus
3.3K / / 19.06.2008
Цитата: cvetik_kof
Необходимо подключится к сайту через сокеты,как это лучьше сделать - сайт янекс.


Цитата: patison
Но в вашем случае в качестве сервера выступает сайт яндекс (сервак на котором он находится).


А в качестве клиента возьмите IE/Opera/FF/Chrome... И ничего писать не потребуется! :D. Они подключатся через сокеты, я гарантирую это.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог