![]() |
|
Модераторы: xvr |
![]()
|
|
| seravr |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 3.1.2009 Репутация: нет Всего: нет |
Всем привет, я начал изучать TCP/IP, API сокетов под Linux. Есть несколько вопросов, помогите понять пожалуйста.
1)Как можно отлаживать программы типа клиент/сервер на одном компьютере(дома нет локалки) 2)никак не могу понять как должна работать любая игра(даже самая простая), которая предусматривает игру по локалки или по нету, т.е. не могу понять схему клиент/сервер игры, какое приложение должно быть сервером, а какое - клиентом, т.е. как подобная программа взаимодействует 3)для программирования приложений типа клиент-сервер достаточно ли знать интерфейс сокетов и протокол TCP/IP, что можно еще посоветовать для более глубокого изучения сетей 4)где можно взять source по программированию сокетов(типа аська) для Linux, поделитесь советами кто по каким примерам учился Буду рад любому ответу, всем заранее спасибо Это сообщение отредактировал(а) seravr - 31.1.2009, 14:11 |
|||
|
||||
| MAKCim |
|
||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
использовать loopback интерфейс loopback сервер обеспечивает взаимодействие клиентов и соответствующий протокол 1. протокола TCP/IP нет, есть отдельно протоколы TCP, IP 2. для неспециализированных клиент-серверных приложений нет необходмости в _глубоком_ знании TCP и IP
читать У. Стивенса -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||
|
|||||
| seravr |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 3.1.2009 Репутация: нет Всего: нет |
спасибо, а как этот loopback интерфейс использовать подскажите пожалуйста.
и еще по поводу игры, т.е. сама игра-это сервер, а те кто играют, т.е. используют программу клиент, и взаимодействие происходит между клиентами посредством сервера, а сам сервер должен где либо установлен в сети и постоянно функционировать, правильно ли я понял? |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
да точно так же как и другие socket()->connect(127.x.y.z:port) на клиенте socket()->bind(127.x.y.z:port)->listen()->accept() на сервере -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| seravr |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 3.1.2009 Репутация: нет Всего: нет |
MAKCim, спасибо Вам огромное
|
|||
|
||||
| seravr |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 3.1.2009 Репутация: нет Всего: нет |
извините за надоедливость, хочу спросить, в linuxe клиента и сервера надо запускать в разных терминалах?
|
|||
|
||||
| cutwater |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 592 Регистрация: 24.6.2008 Репутация: нет Всего: 10 |
Не обязятельно... если правильно понял вопрос, если хотите чтобы в одном необходимо первый процессу сделать fork
в bash например
Добавлено через 3 минуты и 47 секунд The Bash & (ampersand) is a builtin control operator used to fork processes. From the Bash man page, "If a command is terminated by the control operator &, the shell executes the command in the background in a subshell". Добавлено через 4 минуты и 42 секунды То есть после написания комманды необходимо добавит амперсанд (&) |
|||
|
||||
| seravr |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 3.1.2009 Репутация: нет Всего: нет |
ничего не понял, можно поподробнее пожалуйста, функция fork() по-моему создает еще один процесс, подобный первому.
я имел ввиду, когда я компилирую отдельно приложение клиента и приложение сервера, и хочу их запустить в одном окне терминала, дело в том, что я запускаю сервер, а он будет ждать приема и из этого терминала я не смогу запустить клиента, получается только из разных терминалов запускать. можно ли как сделать, чтоб в одном окне работать и с серверным приложением, и с клиентским |
|||
|
||||
| cutwater |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 592 Регистрация: 24.6.2008 Репутация: нет Всего: 10 |
Если Вы имени приложения ставите & то bash делает fork и запускает приложение ваше в фоновом режиме
в итоге Вы можете запустить как клиент так и сервер jobs - показать фоновые процессы текущего терминала |
|||
|
||||
| seravr |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 3.1.2009 Репутация: нет Всего: нет |
спасибо огромное
|
|||
|
||||
| seravr |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 3.1.2009 Репутация: нет Всего: нет |
Друзья, подскажите пожалуйста почему не работает сервер(точнее работает), функция
recv(sock,pbuff,sizeof(buff),0) возвращает -1, т.е. не принимает сообщение, хотя клиент нормально отправляет сообщение.(система: linux open suse) Подскажите пожалуйста в чем ошибка??? и еще хочу у Вас спросить, какие классы есть для работы с сокетами в майкрософт вижал студии 2008, что посоветуете почитать про программирование сокетов под виндовс(подскажите хорошую книжку), какие там используются функции и как программирование сокетов организовать с объектно-ориентированной моделью программирования
|
||||
|
|||||
| SVN74 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 5.5.2008 Где: Комсомольск на Дн епре Репутация: нет Всего: 18 |
Если сервер получил сокет, значит остальное проще...
Попробуй заменить на recv(sock,&buff[0],sizeof(buff),0) |
|||
|
||||
| seravr |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 3.1.2009 Репутация: нет Всего: нет |
спасибо, сейчас попробую, а то я уже чего только не перепробовал, отпишусь минут через 10
|
|||
|
||||
| seravr |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 3.1.2009 Репутация: нет Всего: нет |
нет, не помогло, все равно тоже самое, в сервере функция recv(sock,pbuff,sizeof(buff),0) возвращает -1, а функция perror() выводит что то типа: TRANSPORT ENDPOINT IS NOT CONNECTED
товарищи, помогите плиз разобраться с этой ошибкой |
|||
|
||||
| SVN74 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 5.5.2008 Где: Комсомольск на Дн епре Репутация: нет Всего: 18 |
Попробуй еще так:
while((reccode=recv(sock,pbuff,sizeof(buff),0)) && reccode !=SOCKET_ERROR) В клиенте тоже надо заменить на send(sock,&buff[0],sizeof(buff),0) ОООО . А как он у тебя коннетится??? (addr.sin_addr.s_addr=htonl(INADDR_LOOPBACK) - > надо указать реальный адрес 127.0.0.1 s_addr=inet_addr(SVR_IP); Это сообщение отредактировал(а) SVN74 - 7.2.2009, 22:50 |
|||
|
||||
| seravr |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 3.1.2009 Репутация: нет Всего: нет |
по-моему константа INADDR_LOOPBACK-это и есть 127.0.0.1 Добавлено через 1 минуту и 40 секунд Ребята, а как быть с этими вопросами??? еще хочу у Вас спросить, какие классы есть для работы с сокетами в майкрософт вижал студии 2008, что посоветуете почитать про программирование сокетов под виндовс(подскажите хорошую книжку), какие там используются функции и как программирование сокетов организовать с объектно-ориентированной моделью программирования |
|||
|
||||
| seravr |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 3.1.2009 Репутация: нет Всего: нет |
не помогло.
в чем же ошибка? |
|||
|
||||
| vinick |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 9.6.2005 Репутация: 4 Всего: 22 |
man 2 accept И вобще у тебя получается что сервер читает данные независимо от того как завершился accept |
|||
|
||||
| seravr |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 3.1.2009 Репутация: нет Всего: нет |
спасибо Вам ОГРОМНОЕ, сейчас пойду пробовать.
а скажите пожалуйста что такое "man 2"? Добавлено через 4 минуты и 8 секунд Друзья, посоветуйте пожалуйста литературу, по которой Вы учились, мне очень охота программировать сокеты под вижал студию, а как и что там-я не знаю, изучаю все под LINUX? а очень охота под WINDOWS |
|||
|
||||
| SVN74 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 5.5.2008 Где: Комсомольск на Дн епре Репутация: нет Всего: 18 |
||||
|
||||
| seravr |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 3.1.2009 Репутация: нет Всего: нет |
спасибо Вам, но там тоже ведь под Linux Это сообщение отредактировал(а) seravr - 8.2.2009, 00:38 |
|||
|
||||
| vinick |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 9.6.2005 Репутация: 4 Всего: 22 |
Это я по привычке написал
Нет, автор старался, чтобы книга была полезна и программистам под Windows. Так что ее можно смело читать.
Есть C++ библиотека asio. Не так давно она вошла в состав Boost, но ее можно использовать и отдельно. библиотека содержит только h-файлы и может работать с VC++ . |
||||
|
|||||
| seravr |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 3.1.2009 Репутация: нет Всего: нет |
vinick и SVN74, спасибо Вам огромное, программа заработала после того как я изменил аргументы в функции accept(sock,(struct sockaddr*)&addr,sizeof(addr)), где второй и третий аргумент я заменил на NULL. прога сразу начала принимать вызов от клиента. С чем это связано- не пойму, не помогите разобраться пожалуйста.
И еще хочу спросить, когда я в терминале запускаю сначала сервер ./server& а потом ./client, то сервер не откликается с первого раза на вызов клиента и никак не реагирует, а когда я опять вызываю ./client, то сервер нормально работает, вообщем сервер начинает отвечать только со второго вызова клиента, подскажите почему? |
|||
|
||||
| Олег2005 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 421 Регистрация: 26.5.2005 Где: Рига Латвия Репутация: 1 Всего: 11 |
Виндовс
12. Оланд Д., Джонс Э. Программирование в сетях Microsoft Windows , ISBN: 5-318-00725-2 издательство "Питер", 2002 28. Jones A., Ohlund J., Ohlund Jim Network Programming for Microsoft Windows, Second Edition Microsoft Press, February 13, 2002 ISBN: 0735615799 Вторая книга есть только на английском. Русской версии не видел |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
читать эу книгу тут цены в белорусских рублях, так что не пугайтесь Добавлено через 57 секунд еще раз выложи сюда полный код приложения -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| seravr |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 3.1.2009 Репутация: нет Всего: нет |
Олег2005 и MAKCim, спасибо Вам огромное, сейчас буду читать.
Ребята, а никто не знает почему так: ...программа заработала после того как я изменил аргументы в функции accept(sock,(struct sockaddr*)&addr,sizeof(addr)), где второй и третий аргумент я заменил на NULL. прога сразу начала принимать вызов от клиента. С чем это связано- не пойму, не помогите разобраться пожалуйста. И еще хочу спросить, когда я в терминале запускаю сначала сервер ./server& а потом ./client, то сервер не откликается с первого раза на вызов клиента и никак не реагирует, а когда я опять вызываю ./client, то сервер нормально работает, вообщем сервер начинает отвечать только со второго вызова клиента, подскажите почему? |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| seravr |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 3.1.2009 Репутация: нет Всего: нет |
|
||||
|
|||||
| vinick |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 9.6.2005 Репутация: 4 Всего: 22 |
и анализируй errno в случае ошибок. полезно. |
|||
|
||||
| seravr |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 3.1.2009 Репутация: нет Всего: нет |
хорошо, спасибо Вам
|
|||
|
||||
| seravr |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 3.1.2009 Репутация: нет Всего: нет |
Друзья, возникли еще вопросы, которые я не до конца понимаю, помогите понять пожалуйста
1) что такое поток и процесс??? понял, что в процессе может быть несколько потоков или один поток 2)как обойти блокировку сокетов при использовании функций send() и recv() Буду рад любому ответу |
|||
|
||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 20 Всего: 223 |
Да. Процесс - это твоя исполняемая программа. У каждого процесса своя память и они друг с другом никак не пересекаются. Все процессы в системе исполняются одновременно (или спят по очереди Поток создается внутри процесса, все потоки работают в общей памяти процесса, все они исполняются одновременно (или спят).
|
||||
|
|||||
| seravr |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 3.1.2009 Репутация: нет Всего: нет |
xvr, спасибо большое
|
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
нет нет не забывай, в каком мы разделе -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 20 Всего: 223 |
Я помню, но IMHO, человеку, который спрашивает что такое процесс и поток, рассказывать о особенностях реализации того и другого в Linux будет черезчур жестоко 2 seravr - можешь считать, что процесс о поток это именно то, что я написал. Если интересует реальная их реализация в Linux'е, то она немного другая. Но к тому времени, когда тебе смогут понадобится детали реальной реализации, у тебя таких вопросов (про отличия потока и процесса) уже не останется |
|||
|
||||
| seravr |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 3.1.2009 Репутация: нет Всего: нет |
xvr, спасибо
я именно это и хотел понять, со временем более глубоко разберусь |
|||
|
||||
![]()
|
| Правила форума "С/С++: Программирование под Unix/Linux" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |