![]() |
|
Модераторы: 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 |
|||
|
||||
![]()
|
| Правила форума "С/С++: Программирование под 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. |