Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.05.21;
Скачать: CL | DM;

Вниз

Почему нет коннекта   Найти похожие ветки 

 
KyRo   (2006-05-04 16:31) [0]

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

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;


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


 
Сергей М. ©   (2006-05-04 16:37) [1]


> тросировке


Кого "тросируешь"-то ? Клиента ? Сервера ?


 
KyRo   (2006-05-04 16:39) [2]

Сервера if Server.Socket.ActiveConnections>0
      then
        begin

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


Вот эти строчки и не одного соединения нет. Всегда равно 0


 
Сергей М. ©   (2006-05-04 16:45) [3]


> Всегда равно 0


"Воткни" в итерацию сего цикла строчку

 Application.Processmessages

и да пребудет с тобой счастье ... на время ...


 
KyRo   (2006-05-04 16:47) [4]

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


 
KyRo   (2006-05-04 16:49) [5]

Тем более что у меня оно пишет не известный идентификатор


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


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


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


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


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


 
KyRo   (2006-05-04 17:04) [7]

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


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


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


uses Forms


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


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

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


 
KyRo   (2006-05-05 10:26) [9]

Основной не подходит по двум причинам
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 10:35) [10]


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


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

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

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

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


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


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


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


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

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


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

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

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

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


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


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


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


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


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


> No adres was supplied(10057)


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


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

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

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

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


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

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


 
KyRo   (2006-05-05 12:09) [15]

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


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


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


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


 
KyRo   (2006-05-05 12:19) [17]

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


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

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


 
balepa ©   (2006-05-05 14:25) [19]


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

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


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


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


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


 
balepa ©   (2006-05-05 14:45) [21]


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

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


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


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


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

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


 
balepa ©   (2006-05-05 15:13) [23]


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

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

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


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


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


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


 
balepa ©   (2006-05-06 06:22) [25]


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

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



Страницы: 1 вся ветка

Текущий архив: 2006.05.21;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.035 c
9-1130540296
adolf
2005-10-29 02:58
2006.05.21
help for delphix


2-1146493728
AlexanderMS
2006-05-01 18:28
2006.05.21
Выбранный элемент ListBox теряет фокус


2-1146745006
olevacho_
2006-05-04 16:16
2006.05.21
формат данных для TiDHTTP.POST


15-1145868928
031178
2006-04-24 12:55
2006.05.21
Как защитить свою программу


8-1135447050
Nigel
2005-12-24 20:57
2006.05.21
System volume