IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

> Сокеты и консоль
Unconnected
сообщение 24.06.2009 23:26
Сообщение #1


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Привет всем.

Животрепещущий вопрос: возможно ли в консоли присвоить событию сокета (OnRead, например) свою процедуру? Например, Client.onread:=myevent;. Описать её (myevent) получается, а вот присвоить правильно - нет..


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 25.06.2009 12:16
Сообщение #2


Гость






По идее Event1 должен быть методом класса, поскольку в типе TSocketNotifyEvent есть указание:
type TSocketNotifyEvent = procedure (Sender: TObject; Socket: TCustomWinSocket) of object;

(2 слова в конце видишь? smile.gif )

Итого, решение тривиальное - обернуть всю работу с сокетом своим классом:
type
TFooClass = class(TObject)
server:TServersocket;
procedure Event1(Sender: TObject; Socket: TCustomWinSocket);
end;



Procedure TFooClass.Event1(Sender: TObject; Socket: TCustomWinSocket);
begin
writeln(socket.receivetext);
end;

var
obj: TFooClass;
begin
obj := TFooClass.Create;
with obj do begin
server:=TServerSocket.create(nil);
server.port:=1001;
server.OnClientRead:=event1;
server.ServerType := stNonBlocking;
server.Open;
while server.active do sleep(100);
end;
obj.Free;
end.
Можешь еще добавить try/finally, как положено, и создавать сокет в конструкторе класса TFooClass...
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 8.07.2025 8:00
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"