Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Почему нет коннекта


Страницы:   1 2

KyRo ©   (2006-05-04 16:31:00) 

Я создаю сервер

Server:=TServerSocket.Create(nil);
 Server.Port:=9990;
 Server.Socket.OnClientRead:=ClientRead;
 Server.Socket.OnClientWrite:=ClientWrite;
 Server.Open;
   While not Terminated do
     begin
      if Server.Socket.ActiveConnections>0
       then
         begin

           for i := 0 to Server.Socket.ActiveConnections -1  do
            begin
              Server.Socket.Connections[i].SendText('Hello');
            end;
        end;
  end;


После создания я проверяю наличие подсоеденившихся клиентов и посылаю строку

Так я создаю клиента

 Client:=TClientSocket.Create(nil);
   Client.Port:=9990;
   Client.Address:='127.0.0.1';
   Client.OnRead:=ClientRead;
   Client.OnWrite:=ClientWrite;
   Client.Open;


И по идее этому клиенту должна передатся строка .
Но при тросировке я вижу что активных соединений нет !
Что я не правильно делаю ?


balepa   (2006-05-06 06:22:00) [1]


> Сергей М. ©   (05.05.06 15:14) [24]

Алгоритм только очень очень "общий".
А на деревню дедушке тоже неплохо бы съездить :)


Сергей М.   (2006-05-05 15:14:00) [2]


> balepa ©   (05.05.06 15:13) [23]


Это общие фразы.
"На деревню дедушке" это называется, а не алгоритмом


balepa   (2006-05-05 15:13:00) [3]


> Сергей М. ©   (05.05.06 15:07) [22]

Я про Шаблон алгоритма "сервера" и "клиента" ничего не говорил.

Клиент подключается к Серверу. Сервер обрабатывает запросы от клиента.


Сергей М.   (2006-05-05 15:07:00) [4]


> balepa ©   (05.05.06 14:45) [21]


Шаблон алгоритма "сервера" и "клиента" ..

Думаю, таковой не существует.


balepa   (2006-05-05 14:45:00) [5]


> balepa ©   (05.05.06 14:25) [19]

Шаблон чего/кого " человека" ?


Сергей М.   (2006-05-05 14:38:00) [6]


> balepa ©   (05.05.06 14:25) [19]


Ну так изволь привести "универсальный шаблон") ...


balepa   (2006-05-05 14:25:00) [7]


> Сергей М. ©   (05.05.06 14:19) [18]

Ну, зачем же человека так пугать :)


Сергей М.   (2006-05-05 14:19:00) [8]

Ждут тебя страшные засады)


KyRo   (2006-05-05 12:19:00) [9]

Все теперь понял спасибо


Сергей М.   (2006-05-05 12:11:00) [10]


> обращаюсь к компоненте TServerSocket ?


Ну где же к TServerSocket, когда к TCustomWinSocket ?


KyRo   (2006-05-05 12:09:00) [11]

Спасибо работает !!
А из за чего это я ж просто обращаюсь к компоненте TServerSocket ?


Сергей М.   (2006-05-05 11:47:00) [12]

procedure TForm1.ServerClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
s:String;
begin
s:= Socket.ReceiveText;
...
end;


KyRo   (2006-05-05 11:40:00) [13]

Я вызываю  Receive-метод в обработчике

procedure TForm1.ServerClientRead(Sender: TObject;
 Socket: TCustomWinSocket);
var
 s:String;
 begin
s:=Server.Socket.ReceiveText;
Showmessage(s);
end
;

А посылаю клиентом по нажатию кнопки на форме


Сергей М.   (2006-05-05 11:21:00) [14]


> ShowMessage() это я просто проверяю удачно или нет


Для вывода отладочных сообщений в доп.потоке пользуй MessageBox() вместо ShowMessage()


> по чему то не хватает просто актив


Потому что у тебя ClientType = ctNonBlocking.
Самое простое - установи ClientType = ctBlocking, тогда будет "хватать".


> No adres was supplied(10057)


Видимо, ты вызываешь Receive-метод не того объекта.


KyRo   (2006-05-05 11:08:00) [15]

ShowMessage() это я просто проверяю удачно или нет
и по чему то не хватает просто актив.

насчет Socket1.Socket.Connect(0);
то ты прав сначала правда вроде как нет коннекта , но потом он появляется с не большой задержкой.

Ошибка которая возникает при передаче данных - No adres was supplied(10057) on api (recv)


Сергей М.   (2006-05-05 10:35:00) [16]


> не знаю правильно ли это ?


Неправильно.

ClientSocket.Active := True; //этого достаточно для запуска операции коннекта с сервером

А вот дальнейшие программные действия сильно зависят от режима работы кл.гнезда - ctNonBlocking или ctBlocking

Ну и , разумеется, никакие ShowMessage() в доп.потоке недопустимы.


> ошибка что то вроде ошибки передачи


"Что то вроде" - это на деревню дедушке.


> Из за чего это может быть ?


Очевидно, из-за "Что то вроде" ...

нужна помощь ?
Изволь приводить конкретныесообщения об ошибках


KyRo   (2006-05-05 10:26:00) [17]

Основной не подходит по двум причинам
1 ) То что сервер и клиент будут у меня сервисами и это у меня потоки которые он порождает.
2) То что у меня сейчас тестовая программа и для удобства переноса я их сделал нитями в отдельном модуле.

Сейчас вроде конект есть
но я сделал вот так и не знаю правильно ли это ?

  Socket1.Active:=True;
   Socket1.Socket.Connect(0);
if Socket1.Socket.Connected then
       begin
        ShowMessage('1');
       end
      else
        ShowMessage('2');


При таком открытии клиента
сервер пишет что есть активные соединения.

Но вот тоже проблема при передаче текстового сообщения

Socket1.Socket.SendText('AAA');
и попытке его приема в обработчике сервера OnClientRead
Возникает ошибка что то вроде ошибки передачи. Из за чего это может быть ?


Сергей М.   (2006-05-05 08:35:00) [18]


> Application.Processmessages на вот эту строку и пишет


uses Forms


> создаю сервер в отдельном потоке


Application.Processmessages недопустим в этом случае.

Да и зачем в отдельном потоке-то ?
Чем основной не угодил ?


KyRo   (2006-05-04 17:04:00) [19]

Application.Processmessages на вот эту строку и пишет , а не на итерацию цикла.
Я создаю сервер в отдельном потоке может потому  это не известный идентификатор ?


Сергей М.   (2006-05-04 16:59:00) [20]


> что это значит ?


То и значит - итерация цикла.
Что тут не понятно ?


> у меня оно пишет


"Оно" - это кто/что ?
Ты вообще программингом занят или где ?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо