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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Socket,ы обработка сообщений 
:(
    Опции темы
Алкоголик
Дата 21.2.2008, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Здраствуйте.
Пишу серверную прогу(на Сокетах). Возник вопрос как серверсокет сохраняет сообщения? Т.е. приходят сообщения от клиентов. Он должен задать вопрос базе и отослать ответ клиенту(да/нет). Вот и возник вопрос: если сервер обрабатывает одну задачу, а тут приходит другое он будет ждать в очереди или что..?
Заранее спасибо.
PM MAIL   Вверх
SneG0K
Дата 21.2.2008, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

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



Чтобы сервер мог сразу обрабатывать несколько задач, переведи сокет в неблокирующий режим...
 
Код

s:=soccket(AF_INET,SOCK_STREAM,0);
iMode:=1;
ioctlsocket(s,FIONBIO,iMode);


А далее уже обрабатывай приходящие сообщения... Лучше всего такие сообщения обрабатывать через case..of..end
PM WWW Skype   Вверх
Алкоголик
Дата 22.2.2008, 07:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Благодарю.
И еще просьба дайте код, как избавиться от ошибки, которая возникает на клиенте, когда он неможет соединьться с сервером.

P.S. А лучше всего работающий исходник реализации Клиент/Сервера с обработкой исключений... А то немогу найти ничего кроме чата, а он не совсем то. что нужно...  Так же можно с использованием Indy

Это сообщение отредактировал(а) Алкоголик - 22.2.2008, 10:29
PM MAIL   Вверх
SneG0K
Дата 23.2.2008, 01:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

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



Эх.. молодеж  smile .... полный код я тебе не дам(облом в сорцах рытся), но если клиент не смог подключится, то он возвращает ошибку WSACONNREFUSED

Вот ниже представляю тебе код, для тестирования ошибок, которые могу происходить во время работы библиотеки висок...
Код

procedure TestWinSockError;
    var
     iErr:integer;
     sFullErr:string;
    begin
     sFullErr:='Неизвестная ошибка';
     iErr:=WSAGetLastError;
      case iErr of
       WSASYSNOTREADY:sFullErr:='Основная сетевая подсистема не готова к запуску';
       WSAVERNOTSUPPORTED:sFullErr:='Версия библиотеки не поддерживается';
       WSAEFAULT:sFullErr:='Превышен предел поддерживаемых ОС задач';
       WSAEINPROGRESS:sFullErr:='Выполняется операция в блокирующем режиме, необходимо дождаться её окончания';
       WSANOTINITIALISED:sFullErr:='Сначала надо инициализировать WinSock';
       WSAENETDOWN:sFullErr:='Связь нарушена. Возможно было утеряно соединение с интернетом';
       WSAEAFNOSUPPORT:sFullErr:='Запрашиваемая адресация (значение параметра af) не поддерживается';
       WSAEMFILE:sFullErr:='Ресурс доступных дескрипторов исчерпан';
       WSAENOBUFS:sFullErr:='Недостаточно памяти буфера и сокет не может быть создан';
       WSAEPROTONOSUPPORT:sFullErr:='Протокол не поддерживатся';
       WSAEPROTOTYPE:sFullErr:='Неверный тип спецификации (параметр type) для выбранного протокола';
       WSAESOCKTNOSUPPORT:sFullErr:='Указанный тип сокета не поддерживается заданной адресацией';
       WSAEINVAL:SFullErr:='Сокет уже связан с адресом или не был связан';
       WSAENOTSOCK:sFullErr:='Неверный дескриптор сокета';
       WSAEISCONN:sFullErr:='Сокет уже подключен';
       WSAHOST_NOT_FOUND:sFullErr:='Ответа от компьютера с таким адрессом нет';
       WSATRY_AGAIN:sFullErr:='Ошибка сервера. Попроробуйте еще раз повторить попытку';
       WSANO_RECOVERY:sFullErr:='Появилась ошибка которую нельзя устранить';
       WSANO_DATA:SFullErr:='Имя существует, но нет записи нужного типа';
       WSAEINTR:sFullErr:='Функцией WSACancelBlokingCall отменен блокирующий вызов';
       WSAEALREADY:sFullErr:='Указанный сокет занят неблокирующей оперцией';
       WSAENETUNREACH:SFullErr:='Сеть недоступна в данный момент';
       WSAETIMEDOUT:sFullErr:='Исчерпано время ожидания от сервера. Повторите операцию через некоторое время';
       WSAECONNREFUSED:sFullErr:='Сервер отклонил подключение или он не прослушивает этот порт';
       WSAEWOULDBLOCK:sFullErr:='Сокет создан как неблокирующий, и в данный момент операция не может ыбть завершена';
       WSAEACCES:SFullErr:='Попытка соединеня пакетным сокетом к широковещательному адрессу невозможна, потому что не включен параметр SO_BROADCAST';
       WSAESHUTDOWN:sFullErr:='Сокет закрыт';
       SD_RECEIVE:SFullErr:='0';
      end;
       Application.MessageBox(PChar(sFullErr),'Внимание!!!');
    end;


В тех местах где может происходить ошибка вызываю эту процедуру... Например так
Код

var
Sock:TSocket;
.............
sock:=socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
 if sock<>0 then TestWinSockError;


Ну или же допустим при отправке\инициализации и т.д. 

Эта процедура всегда возвратит тебе код ошибки... конечно-же эта процедура не полная и не идеальная, но содержит основные ошибки(на моё усмотрение), которые могут возникать при работе с сокетами...


Цитата(Алкоголик @  22.2.2008,  06:38 Найти цитируемый пост)
И еще просьба дайте код, как избавиться от ошибки, которая возникает на клиенте, когда он неможет соединьться с сервером.
Избавится от ошибки ты просто так не сможеш, ошибки ведь разные бывают smile Переделай мою процедуру так, чтобы она не показывала ошибку, а исправляла её smile Допустим если возникла ошибка WSANOTINITIALISED, то никто не мешает внести в case такой код 
Код

WSAStartup(MAKEWORD(1,1),WSAData);

Удачи....
PM WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

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

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

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

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

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


 




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


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

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