Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.05.21;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.012 c
15-1145620905
RomanH
2006-04-21 16:01
2006.05.21
Анализ промышленных серверов


15-1145635624
.chap
2006-04-21 20:07
2006.05.21
Компилятор-интерпретатор


15-1146032967
Alex.
2006-04-26 10:29
2006.05.21
Конвертирование фотографий в DVD фильм.


4-1140602600
voe
2006-02-22 13:03
2006.05.21
Нужна помощь с WinRAR`ом


2-1146937202
Неуч
2006-05-06 21:40
2006.05.21
Типы данных





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский