Модераторы: feodorv

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> WinSock-реальные знания... ...и реальная работа 
:(
    Опции темы
Coocky
Дата 19.12.2004, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

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



Столкнулся в первые с написанием сервера.Возникли вопросы по теории smile ...Сетей....
1.Если сообщения подаются на сервер от 6 клиетов,то нужно ли создавать 6 потоков на сервере,для их работы,или Винда сама справиться?
2.Нормально ли работают проги в виде серевера на 2000/XP,или нет смысла создавать такую прогу?


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
En_t_end
Дата 20.12.2004, 05:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Настоящие реальные знания будут, если ты перечитаешь весь rfc и будешь писать не через CSocket!
"Если сообщения подаются на сервер от 6 клиетов,то нужно ли создавать 6 потоков на сервере,для их работы,или Винда сама справиться?"
Теоретически надо использовать функцию %%%%Listen, , а вот там задается максимальное кол-во подключений одновременно, всё имхо происходит ассинхронно именно через %%%%Listen.(там же задаётся такой параметр, как соединять для подключенного сокета новый сокет)
Но практически сталкиваешься с такой проблеммой, как слишком долгое обслуживание подключившихся сокетов, то есть если будет обновременно подключаться 4 сокета, прога может ненеадолго подвиснуть, поэтому имхо лучше будет создавать потоки + ты не знаешь точно насколько загружен канал связи.

"Нормально ли работают проги в виде серевера на 2000/XP,или нет смысла создавать такую прогу?"
У меня всё работает smile
пояснения %%%% -тут я не вспомнил некоторых символов...

PM MAIL ICQ Skype GTalk Jabber   Вверх
Mad
Дата 20.12.2004, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

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



Цитата(Coocky @ 19.12.2004, 21:39)
Если сообщения подаются на сервер от 6 клиетов,то нужно ли создавать 6 потоков на сервере,для их работы,или Винда сама справиться?

Цитата(En_t_end @ 20.12.2004, 04:00)
Теоретически надо использовать функцию %%%%Listen, , а вот там задается максимальное кол-во подключений одновременно

Маленькое уточнение, listen() задает размер ОЧЕРЕДИ подключений (а не максимальное колличество).

Coocky
Общая схемма работы сервера такова
Код

SOCKET sock = socket();
bind();
listen();

while(1)
{
   SOCKET client = accept();

    // сдесь создаеш поток для работы с клиентом
}


Если неохота создавать потоки, то можно воспользоваться ассинхронными методами (тогда winsock создаст поток за тебя smile )

И надо помнить, что если ты будеш использовать STREAM сокеты, то надо еще какойто протокол высокого уровня придумать.
(В оригенале если ты в socket ложиш long, выдать он может его как 4*char, так что надо пересылать или структуры фиксированной длины, или структуры содержащие свою длинну или ввести определение разделителя).



--------------------
user posted image
PM MAIL   Вверх
Coocky
Дата 20.12.2004, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

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



Цитата
задает размер ОЧЕРЕДИ подключений

Да и максимум 5 по умолчанию...
Цитата
Настоящие реальные знания будут, если ты перечитаешь весь rfc и будешь писать не через CSocket!

Да причем здесь это...Вообще эа прога лучше б была под PHP-так не знаю я его хорошо пока....
Для локальной сетки мне с головой WinSocket хватит...
Цитата
В оригенале если ты в socket ложиш long, выдать он может его как 4*char

никогда не сталкивался....А что к примеру еще может измениться...
Еще вопрос опять с использованием WinSocket.Как узнать адрес клиента ,от которого пришло сообщение,или по другому-как выплнить какой -то запрос,который сделал клиент и оправить именно ему выполнение запроса?Или SOCKET client это один,а SOCKET client2 второй?Всегда баловался с одвумя прогами(клиент - сервер),а как дело дошло до множества-потерялся что-то.... smile


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Mad
Дата 20.12.2004, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

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



Coocky
Цитата(Coocky @ 20.12.2004, 15:39)
Или SOCKET client это один,а SOCKET client2 второй?


Код

SOCKET sock = socket();
bind();
listen();

while(1)
{
  SOCKET client = accept();

   CreateThread();
}

void ThreadProc(SOCKET client)
{
}



В итоге каждый поток у тебя будет работать с отдельным клиентом.

Цитата(Coocky @ 20.12.2004, 15:39)
.Как узнать адрес клиента ,от которого пришло сообщение

Функция accept() возвращает адресс клиента.

И вообще уточни, какие сокеты тебя интересует STREAM или DATAGRAM




Это сообщение отредактировал(а) Mad - 20.12.2004, 17:35


--------------------
user posted image
PM MAIL   Вверх
Coocky
Дата 20.12.2004, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

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



Цитата
И вообще уточни, какие сокеты тебя интересует STREAM

Вообще-то SOCK_STREAM.Уж больно нужно достоверность данных smile
Я прочитал твой код,я работал по_другому немного...Ща нет под рукой кода,но если интересно скину smile
Я немного не пойму твоего кода,в смысле синтаксиса smile Я вообще-то про МФС smile
Цитата
Как узнать адрес клиента ,от которого пришло сообщение

Я тут немного прогнал,с вопросом smile Забыл про AnySocket и про сообщения smile Вопрос был похож на типа как я узнаю что мышкой двигаю.....
Цитата
тогда winsock создаст поток за тебя

я че-то про это ничего не знаю.....
Вообщем так представляю себе свою прогу
Запускается сервер-сижу слушаю сеть.Тут соединяется клиент-хватаю паренька за уши(получаю о нем информацию, кидаю его в поток,делаю что надо и отпускаю с данными и с миром smile
Правильная мысль?
Да,Mad,а как выуживать из очереди сообщений,или это опять автоматом-(читай халява) smile ?
Жду ответа ,а пока держи "+",за мои старые слова smile ,и за активность.Думаю это не отолкнет тебя от ответа на последнии вопросы smile



--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Mad
Дата 21.12.2004, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

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



Цитата(Coocky @ 20.12.2004, 21:30)
Вообще-то SOCK_STREAM

Цитата(Coocky @ 20.12.2004, 21:30)
как выуживать из очереди сообщений

Понятие сообщений есть для DATAGRAM сокетов, а для STREAM это просто непрерывный поток.

Привиди пример, что надо сделать (с датообменом), тогда будет легче обьяснить.


--------------------
user posted image
PM MAIL   Вверх
Coocky
Дата 21.12.2004, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

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



А просто работа с базой данных.Посылается запрос,получаем данные запроса и данные отправляем обратно smile


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Mad
Дата 22.12.2004, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

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



Coocky
А почему не дать клиенту прямой коннект к базе ?


--------------------
user posted image
PM MAIL   Вверх
Coocky
Дата 22.12.2004, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

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



Цитата
А почему не дать клиенту прямой коннект к базе

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


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Mad
Дата 22.12.2004, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

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



Цитата(Coocky @ 22.12.2004, 14:35)
Обновлять данные должен только сервак.Остальные только смотреть..

Ну так в чем проблемма ? smile
Делаеш в базе двух пользователей. Например user и server
Клиентские проги коннектяца к базе под user, у которого в правах только выборка банных установленна.


--------------------
user posted image
PM MAIL   Вверх
Coocky
Дата 22.12.2004, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

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



Цитата
Делаеш в базе двух пользователей. Например user и server

Че-то в Access я такого не видел...
Да еще и доработки могут быть.Прога может взаимодействовать не только посредством бд....
А конектиться...Лучше одному подключаться.

Это сообщение отредактировал(а) Coocky - 22.12.2004, 15:47


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Mad
Дата 22.12.2004, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

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



Цитата(Coocky @ 22.12.2004, 14:46)
Че-то в Access я такого не видел...

Ну сразу-бы и сказал, что ты БД не используеш smile

Если каждая запись не превышает 4к, то лучьше использовать DATAGRAM


--------------------
user posted image
PM MAIL   Вверх
Coocky
Дата 22.12.2004, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

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



Цитата
Ну сразу-бы и сказал, что ты БД не используеш

Не понял...Это отношение к Access smile
Цитата
Если каждая запись не превышает 4к, то лучьше использовать DATAGRAM

Ну могу сказать точно...


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Mad
Дата 22.12.2004, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

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



Общая схема такая.

Клиент
отправка пакета запросса на сервер (sendto() формат пакета определяеш сам)
Сервер
Получил запрос (recvfrom()), создает поток, в котором обрабатывает запрос, и начинает посылать пакеты, содержащие данные клиенту (sendto()), по завершению данных, отсылает стоповый пакет.
Клиент
Принимает данные (recvfrom()) smile


--------------------
user posted image
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




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


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

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