| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Сети > Работа с сетью |
| Автор: bokul 27.6.2007, 04:31 |
| Знаю, после прочтения заголовка хочется послать тему куда подальше... ну, например, в Delphi: Сети. Но есть одна оговорка - на чистом WinApi. Так что, не судите строго - выбор между ветками был не из легких.. Конкретно интересует реализация обмена информации между двум приложениями в локальной сети. Возможно ли это реализовать только средствами WinApi? Какие именно надо использовать протоколы и что вообще надо использовать? Зашел на msdn в раздел Networking и утонул, с чего начать? |
| Автор: MetalFan 27.6.2007, 07:52 |
http://narod.yandex.ru/cgi-bin/yandsearch?user=delphiworld&text=WSAStartup&where=2 http://delphiworld.narod.ru/base/sockets1.html http://delphiworld.narod.ru/base/sockets2.html http://delphiworld.narod.ru/base/sockets3.html http://delphiworld.narod.ru/base/sockets4.html |
| Автор: bokul 27.6.2007, 18:29 |
| Спасибо, буду изучать. Только вопрос, не помешает ли моим экспериментам тот факт, что сеть работает через роутер? Меняет ли это способ роботы с ней? |
| Автор: Coder 28.6.2007, 02:37 | ||
Клиентской программе наврятли. А вот серверу, которой будет слушать порт, скорее всего помешает. |
| Автор: MetalFan 28.6.2007, 08:47 |
если порты на рутере не "открыты".... |
| Автор: bokul 28.6.2007, 23:31 |
| Почитал, поразбирался, покодил - не работает прога. В связи этим есть вопросы. Как я понимаю, самая простая модель сокетного клиент-серверного приложения такова: клиент создает свой сокет(ClinetSock1), через который соединяется с сервером. Сервер, в свою очередь, прослушивает свой сокет(ServerSock1), созданный ранее, и, допустим, принимает запрос клиента, создавая этим самым себе новый сокет(ServerSock2) для общения с клиентом. Вопрос: на какой сокет должен слать дальше данные сервер, и из какого принимать? Те же вопросы и для клиента.. |
| Автор: bokul 29.6.2007, 03:50 |
| PS http://gamedev.ru/articles/?sect=8 - рекомендую по сабжу, правда на С, но все отлично описано. |
| Автор: bokul 29.6.2007, 21:09 |
| Что касается роутера, вы оказались правыми : программа тестировалась в интернете и при запуске клиента все отлично работало, сервера - нет. Чтобы исправить такой ход дел, надо открыть порт, используемый сервером, на роутере? Где вообще можно почитать о работе сети, чтобы не было непонятных моментов при работе с сокетами? |
| Автор: bokul 3.7.2007, 01:42 | ||
| А как сделать поддержку одновременного приема и отсылки данных в клиент-сервере? Т.е. мы не знаем заранее какая будет очередность в передачи данных: может быть мы будем только получать пакеты, а может и только отправлять, или же все в перемешку. Цикл вроде: Код
не подходит, даже если будет проверки, ведь recv блочная функция и пока не придут данные, прога ни на команду не сдвинется, а может понадобится отправка данных в этот момент. Потоки разрешат проблему? |
| Автор: bokul 3.7.2007, 18:56 |
| АУУУУУУУУУ! Уделите, пожалуйста, минутку своего время - 5 дней и никакой реакции, или тут не принято отвечать на вопросы новичков? |
| Автор: bokul 4.7.2007, 07:11 |
| |
| Автор: MetalFan 4.7.2007, 08:06 | ||||
| видимо необходимо проверить наличие данных во входном буфере перед вызовом recv. либо вынести работу в отдельный поток... про потоки есть отдельная тема p.s. так же могу предположить (ибо сам с сокетами на WinApi не работал), что можно "протестить" сокет на наличие данных с пом. ioctlsocket примерно так:
|
| Автор: bokul 4.7.2007, 17:53 | ||
|
| Автор: MetalFan 4.7.2007, 21:09 |
| bokul, а проверил? мало-ли что написано) |