![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как присвоить новій обработчик события
KyRo © (2006-05-04 14:06:00)Подскажите.
Я объявляю переменную
Server:TServerSocket;
после чего в коде создаю этот компонент
Server:=TServerSocket.Create(nil);
Server.Port:=9990;
Server.Active:=True;
И я хочу что бы при возникновении события оно происходило в моей процедуре , а не в стандартной .
Я делал так
Server.Socket.OnClientRead:=Connect
Но на в таком случае оно выдает ошибку .
Как можно еще это сделать или обязательно надо создавать потомка ?
KyRo (2006-05-05 13:58:00) [21]
> Где у тебя на стороне сервера фигурирует конкретный клиент
> ?
Procedure TServerHr.ClientRead(Sender: TObject;Socket: TCustomWinSocket);
var
s:String;
begin
s:=Socket.ReceiveText;
end;
Вот принимаю я это сообщение которое послал клиент !! Или это не то ?
Сергей М. (2006-05-05 13:51:00) [22]
> Пытаюсь принять сообщение от клиента
Ок конкретногоклиента, надо понимать ?
И где же, в какой конкретной строчке ты конкретно принимаешь конкретные данные от конкретного клиента ?
Гдеу тебя на стороне сервера фигурирует конкретныйклиент ? Сам-то себе ты в состоянии вразумительно растолковать это ?
KyRo (2006-05-05 13:25:00) [23]
Server:=TServerSocket.Create(nil);
Server.Port:=9990;
Server.Socket.OnClientRead:=ClientRead;
Server.Socket.OnClientWrite:=ClientWrite;
Server.ServerType:=stTHreadBlocking;
Server.ThreadCacheSize:=10;
Server.Active:=True;
Вот создал сервер
Client:=TClientSocket.Create(nil);
Client.Port:=9990;
Client.HOST:='localhost';
Client.OnRead:=ClientRead;
Client.OnWrite:=ClientWrite;
Client.ClientType:=ctBlocking;
Client.Active:=True;
Client.Socket.SendText('YES');
Таким образом создал клиент и послал сообщение
Procedure TServerHr.ClientRead(Sender: TObject;Socket: TCustomWinSocket);
var
s:String;
begin
s:=Socket.ReceiveText;
end;
Пытаюсь принять сообщение от клиента
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;
А таким образом пытаюсь с сервера отправить собщение клиенту.
Клиент принимает сообщение так же само как и сервер.
Так вот эти события OnRead у клиента OnClientRead у сервера и у клиента не возникают.
Это может быть из за блокирующего режима ? И вообще из за чего они не возникают . Может их нельзя делать методом нити ?
Сергей М. (2006-05-05 13:18:00) [24]
> KyRo (05.05.06 13:08) [6]
> ????
!!!!
> что ты имееш ввиду ?
То что "работать с сокетами" вполне может означать и, например, забивание сокетами гвоздей.
А ты что имел ввиду под "работать с сокетами" ?
Может тупить наконец перестанешь и таки приведешь реальный свой код ?
KyRo (2006-05-05 13:08:00) [25]
> Сергей М. © (05.05.06 13:05) [5]
>
> > из за чего это может быть ?
>
>
> Из-за того что "работать с сокетами" - это на деревню дедушке
????
что ты имееш ввиду ?
Я посылаю тест от клиента к серверу и пытаюсь его принять и потом наоборот .
И клиент и сервер у меня блокирующие.
Сергей М. (2006-05-05 13:05:00) [26]
> из за чего это может быть ?
Из-за того что "работать с сокетами" - это на деревню дедушке
KyRo (2006-05-05 13:02:00) [27]Я сделал так
Server:=TServerSocket.Create(nil);
Server.Port:=9990;
Server.Socket.OnClientRead:=ClientRead;
Server.Socket.OnClientWrite:=ClientWrite;
Server.ServerType:=stTHreadBlocking;
Server.ThreadCacheSize:=10;
Server.Active:=True;
где
ClientRead; и ClientWrite; - это
Procedure TServerHr.ClientRead(Sender: TObject;Socket: TCustomWinSocket);
var
s:String;
begin
s:=Socket.ReceiveText;
end;
объявленые в
TServerHr = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
public
constructor Create(CreateSuspennded: Boolean);
procedure ClientRead(Sender: TObject;Socket: TCustomWinSocket);
Procedure ClientWrite(Sender: TObject;Socket: TCustomWinSocket);
end;
Но когда я начинаю работать с сокетами то эти события не возникают из за чего это может быть ?
MBo (2006-05-04 14:21:00) [28]Да, можно, лишь бы прототип совпадал.
KyRo (2006-05-04 14:10:00) [29]А если я например в нити создам новый метод и его присвою ?
MBo (2006-05-04 14:08:00) [30]обработчик события должен быть не обычной процедурой, а методом объекта(например, формы, если она есть)