Сетевое приложение
всем привет! дали задание: программа должна принимать все udp пакеты с порта и ip первоначально заданных с консоли.... реализовать надо на unix системе... никогда не занимался програмированием сетевых приложением... ах да, язык Си .. даже не представляю откуда руки растут... подскажити ллитературу или примерно в какой области надо копаться? Заранее спасибо :)
Могу посоветовать книгу Кернигина и Ритчи "Язык программирования Си". и Полистать мануалы на данную тематику. Это все реализуемо т.е. нет ничего невозможного ...
Керриган и Ритчи тут немного побоку. squirL правильную книжку советует. =)
основы ведь тоже нужно знать ...
А то с таким же успехом можно и букварь порекомендовать - основы же надо знать. =)
Цитата: aks
Блин, если человек собирается писать сетевое приложение на C - само собой подразумевается, что C он знает.
А то с таким же успехом можно и букварь порекомендовать - основы же надо знать. =)
А то с таким же успехом можно и букварь порекомендовать - основы же надо знать. =)
ну вообщето как раз таки с основами у человека проблемы,
Цитата:
язык Си .. даже не представляю откуда руки растут
так что рекомендация чтить K&R вполне соотвествует.
Всем спасибо!)) еще ношел книжки: Йон Снейдер "эффективное программирование TCP/IP" и Вейрле, Пэльке "Структура и реализация сетевых протоколов в ядре" ... все вместе очень круто) еще раз спс за Стивенсона, отличная книга, вот только третьего издание ни где не нашел.... но и второе тоже отлично помогает освоить)
Цитата: qbikk
Всем спасибо!)) еще ношел книжки: Йон Снейдер "эффективное программирование TCP/IP" и Вейрле, Пэльке "Структура и реализация сетевых протоколов в ядре" ... все вместе очень круто) еще раз спс за Стивенсона, отличная книга, вот только третьего издание ни где не нашел.... но и второе тоже отлично помогает освоить)
да, снейдер тоже очень хорошая книга.
второе издание стивенса - не рекомендую. оно серьезно устарело и некоторые примеры просто не будут работать на современных системах. основы основами, но когда примеры из книги не компилируются - это обидно :)
я кстати давно и страстно желаю 3е издание. kot_, движется процесс? :)
а не проще его уже купить?
Цитата: ~ArchimeD~
я кстати давно и страстно желаю 3е издание. kot_, движется процесс? :)
Да. наследующей неделе в пятницу выложу еще как минимум 10 глав.
Цитата: squirL
а не проще его уже купить?
сетевое приложение под unix как следовало ожидать)
надо мол по udp получать сообщения и с ними чет делать, не важно
сообщение состоит из шапки и строки переменной длины (в каждом сообщение разное)... в шапке передается размер всего сообщения, ну а размер шапки постоянен...
ну так вот, яя создаю сокет, принимаю с помощью команды recvfrom() шапку, т.е. в параметре размер буфера получения ставлю размер шапки... потом смотрю в оной размер всего сообщ и с помощью не хитрых операций выясняю размер строки... потом (как я предпологал) опять обращаюсь к recvfrom() и в рразмере буфера на получение ставлю этот вычесленный размер... но когда я повторно обращаюсь к recvfrom как будто сообщения и не было и она ждет получения сообщ.... в чем трабла? у меня появилось предположение что после первого обращения все сообщение стирается из буфера... но проверить его никак не могу)
заранее благодарен)
А можно кода кусок, где происходит получение и отправка данных. Чтобы не гадать без толку.
if ( ( k =recvfrom( s, &data, HEAD_SIZE , MSG_PEEK, (struct sockaddr * ) c_addr, &len ) ) < 0 )
{
printf("%s: recvfrom err\n", pr_name);
return 2;
}
if ( k < ( data.len ) )
{
if ( ( l = recvfrom( s, data.param, ( data.len - HEAD_SIZE + 4 ) , 0, (struct sockaddr * ) c_addr, &len ) ) < 0 )
{
printf("%s: recvfrom err\n", pr_name);
return 2;
}
}
как я понял, параметр MSG_PEEK как раз и говорит о том что не надо удалять все сообщение... во всех книгах это опускается и говориться что мол ставьте 0 и вссе будет норм) а есле вместо MSG_PEEK будет стоять 0 то после первого обращения все сообщение удаляется з буфера сокета... на сколько я понял.. ну покрайней мере так все работает)