![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Клиент 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]Да забыл добаваить все работает до моментакогда раз в мин что то должно придти на сервер :(.
Спасибо