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

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

Клиент TClientSocket Сервер TIdTCPServer не понимают друг друга [D6, Win2k, WinXP]


Kacnep ©   (2006-03-10 13:27:00) 

На клиенте использую  cs_Client: TClientSocket;
Неблокирующий режим

В самом начале на событии ОнКоннект с клиента идет отправка версии и сервер получив и сверив версии (байт) отправляет некий дикий буфер. Клиент получает, парсит его. И спустя скажем 1 мин отправляет на сервер что типа таких строк в зависимости от настроения.

cs_Client.Socket.SendText(' ');
или
cs_Client.Socket.SendText('c:\cheat\cheat.exe ');

Сервер пишеться на Инди 10 и Дельфи 6
   id_Srv: TIdTCPServer;
Смотрим ниже код он Execute...
ВООБЩЕ! ничего сервант не получает а токо виснет. :( почему может быть?
Может как то ОнЭкзекуте не верно использую.

ВОПРОС 2 Надо ли выносить все это дело в отдельный поток? - ВЕдь клиентов таких куча будет... Осилит?


procedure Tf_Main.id_SrvConnect(AContext: TIdContext);
var
 clVer:Smallint;
begin
 clVer:=AContext.Connection.IOHandler.ReadSmallInt(false);
 if clVer<>c_Ver then
   AContext.Connection.Disconnect
 else begin
   lb_Users.Items.Insert(0,AContext.Connection.Socket.Binding.PeerIP);
   AContext.Connection.IOHandler.Write(MS);
//    sb_Main.Panels[3].Text:=IntToStr(strtoint(sb_Main.Panels[3].Text)+1);
 end;
end;

procedure Tf_Main.id_SrvExecute(AContext: TIdContext);
var
 s:string;
begin
 lb_Users.Items.Insert(0,AContext.Connection.IOHandler.Host);
 s:=AContext.Connection.IOHandler.ReadLn;
 Addlog(s,Logf);
 Caption:=s;
 //!!!если читер то обновить статус бар и вызвать дисконнект
end;



Спасибо


Каспер   (2006-03-12 10:21:00) [1]

Все народ! Все заработало. Сразу... (#13#10) (Не туда не то и не так посылал)
Большое спасибо откликнувшимся!
Удачи и поменьше ошибок в Ваших проектах!


Сергей М.   (2006-03-10 14:48:00) [2]


> смотрел на него в течении 10 сек


Ну и чего ты на него вылупился, спрашивается ?)

Сам по себе он не заработает - ошибки нужно исправлять ..

Начни с того что обращение к ListBox'у в контексте доп.потока недопустимо


Kacnep   (2006-03-10 14:25:00) [3]

Нет :(
не заработало :((
Блин буду тестить и разбираться :((
Главное сервак виснет намертво (смотрел на него в течении 10 сек)... :(


Сергей М.   (2006-03-10 14:23:00) [4]


> если зарабюотает


А куда оно денется)

Еще как заработает !

Передача терминирующей строку последовательности символов #13#10 - крайне важный момент для работы ReadLn()


Kacnep   (2006-03-10 14:05:00) [5]

Люди! Не поверите что я с вами сделаю если зарабюотает!
СПАСИБО!


Pavia   (2006-03-10 13:53:00) [6]

Kacnep
Клиент
cs_Client.Socket.SendText('c:\cheat\cheat.exe ');
шлет
'c:\cheat\cheat.exe '
А сервер ждет конца строки #13#10.
При отправки с клиента добавь в конце два символа
cs_Client.Socket.SendText('c:\cheat\cheat.exe '#13#10);


Dmitrij_K   (2006-03-10 13:52:00) [7]

Попробуй SendText('лалала' #13#10)


Kacnep   (2006-03-10 13:34:00) [8]

Да забыл добаваить все работает до моментакогда раз в мин что то должно придти на сервер :(.
Спасибо


Наверх

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