Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с сетью 
:(
    Опции темы
bokul
Дата 27.6.2007, 04:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 22.7.2006

Репутация: нет
Всего: нет



Знаю, после прочтения заголовка хочется послать тему куда подальше... ну, например, в  Delphi: Сети. Но есть одна оговорка - на чистом WinApi.  Так что, не судите строго - выбор между ветками был не из легких..

Конкретно интересует реализация обмена информации между двум приложениями в локальной сети. Возможно ли это реализовать только средствами WinApi? Какие именно надо использовать протоколы и что вообще надо использовать? Зашел на msdn в раздел Networking и утонул, с чего начать? 
PM MAIL   Вверх
MetalFan
Дата 27.6.2007, 07:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 14
Всего: 128



Цитата(bokul @  27.6.2007,  05:31 Найти цитируемый пост)
с чего начать?

WSAStartup  smile 

Сокеты 1
Сокеты 2 (Кодинг блокирующих сокетов)
Сокеты 3 (Кодинг неблокирующих сокетов)
Сокеты 4 (Использование DScan)

Это сообщение отредактировал(а) MetalFan - 27.6.2007, 07:58


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
bokul
Дата 27.6.2007, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 22.7.2006

Репутация: нет
Всего: нет



Спасибо, буду изучать. Только вопрос, не помешает ли моим экспериментам тот факт, что сеть работает через роутер? Меняет ли это способ роботы с ней?
PM MAIL   Вверх
Coder
Дата 28.6.2007, 02:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 13.12.2004

Репутация: нет
Всего: 11



Цитата

Только вопрос, не помешает ли моим экспериментам тот факт, что сеть работает через роутер?

Клиентской программе наврятли. А вот серверу, которой будет слушать порт, скорее всего помешает.
PM MAIL   Вверх
MetalFan
Дата 28.6.2007, 08:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 14
Всего: 128



Цитата(Coder @  28.6.2007,  03:37 Найти цитируемый пост)
скорее всего помешает

если порты на рутере не "открыты"....


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
bokul
Дата 28.6.2007, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 22.7.2006

Репутация: нет
Всего: нет



Почитал, поразбирался, покодил - не работает прога. В связи этим есть вопросы. Как я понимаю, самая простая модель сокетного клиент-серверного приложения такова: клиент создает свой сокет(ClinetSock1), через который соединяется с сервером. Сервер, в свою очередь, прослушивает свой сокет(ServerSock1), созданный ранее, и, допустим, принимает запрос клиента, создавая этим самым себе новый сокет(ServerSock2) для общения с клиентом. Вопрос: на какой сокет должен слать дальше данные сервер, и из какого принимать? Те же вопросы и для клиента..
PM MAIL   Вверх
bokul
Дата 29.6.2007, 03:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 22.7.2006

Репутация: нет
Всего: нет



 smile Я - разобрался! Код - заработал! Спасибо за ответы! 

PS Полное руководство по сетевому программированию для разработчиков игр. - рекомендую по сабжу, правда на С, но все отлично описано.
PM MAIL   Вверх
bokul
Дата 29.6.2007, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 22.7.2006

Репутация: нет
Всего: нет



Что касается роутера, вы оказались правыми :  программа тестировалась в интернете и при запуске клиента все отлично работало, сервера - нет. Чтобы исправить такой ход дел, надо открыть порт, используемый сервером, на роутере? Где вообще можно почитать о работе сети, чтобы не было непонятных моментов при работе с сокетами?

Это сообщение отредактировал(а) bokul - 29.6.2007, 22:41
PM MAIL   Вверх
bokul
Дата 3.7.2007, 01:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 22.7.2006

Репутация: нет
Всего: нет



А как сделать поддержку одновременного приема и отсылки данных в клиент-сервере? Т.е. мы не знаем заранее какая будет очередность в передачи данных: может быть мы будем только получать пакеты, а может и только отправлять, или же все в перемешку. Цикл вроде:
Код


Код

repeat
        send(bla-bla);
        recv(bla-bla);
until false;


не подходит, даже если будет проверки, ведь recv блочная функция и пока не придут данные, прога ни на команду не сдвинется,  а может понадобится отправка данных в этот момент. Потоки разрешат проблему?

Это сообщение отредактировал(а) bokul - 3.7.2007, 01:43
PM MAIL   Вверх
bokul
Дата 3.7.2007, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 22.7.2006

Репутация: нет
Всего: нет



АУУУУУУУУУ! Уделите, пожалуйста, минутку своего время - 5 дней и никакой реакции, или тут не принято отвечать на вопросы новичков?
PM MAIL   Вверх
bokul
Дата 4.7.2007, 07:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 22.7.2006

Репутация: нет
Всего: нет



 smile 
PM MAIL   Вверх
MetalFan
Дата 4.7.2007, 08:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 14
Всего: 128



видимо необходимо проверить наличие данных во входном буфере перед вызовом recv.
либо вынести работу в отдельный поток...
про потоки есть отдельная тема
p.s. так же могу предположить (ибо сам с сокетами на WinApi не работал), что можно
"протестить" сокет на наличие данных с пом. ioctlsocket примерно так:
Код

...
ioctlsocket( hSocket, FIONREAD, lDataAmount )
...

Цитата(MSDN)

FIONREAD 
Use to determine the amount of data pending in the network's input buffer that can be read from socket s. The argp parameter points to an unsigned long value in which ioctlsocket stores the result. FIONREAD returns the amount of data that can be read in a single call to the recv function, which may not be the same as the total amount of data queued on the socket. If s is message oriented (for example, type SOCK_DGRAM), FIONREAD still returns the amount of pending data in the network buffer, however, the amount that can actually be read in a single call to the recv function is limited to the data size written in the send or sendto function call.



Это сообщение отредактировал(а) MetalFan - 4.7.2007, 09:58


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
bokul
Дата 4.7.2007, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 22.7.2006

Репутация: нет
Всего: нет



 smile Спасибо, только Requirements у этой функции и оказывается, что XP для сервера не подходит, а надо именно он (или оно smile ).

Цитата

Requirements
Client  Requires Windows Vista, Windows XP, Windows 2000 Professional, Windows NT Workstation, Windows Me, Windows 98, or Windows 95.

Server  Requires Windows Server 2008, Windows Server 2003, Windows 2000 Server, or Windows NT Server.

PM MAIL   Вверх
MetalFan
Дата 4.7.2007, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 14
Всего: 128



bokul, а проверил? мало-ли что написано)


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.1169 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.