Вопрос № 90008: Здравйствуйте.
Дописываю дипломку "удаленное администрирование компьютеров локальной сети".
Скоро защита. Есть проблема.
Имеется клиентская часть:
var CS1: TClientSocket;
mes: String;
procedure FrmOnCreate...Вопрос № 90009: Здравствуйте уважаемые эксперты. Подскажите пожалуйста, как реализовать градиентную заливку в RichEdit?...Вопрос № 90091: Как можно считывать данные регистров параллельного порта(желательно без использования ассемблера)?...
Вопрос № 90.008
Здравйствуйте.
Дописываю дипломку "удаленное администрирование компьютеров локальной сети".
Скоро защита. Есть проблема.
Имеется клиентская часть:
var CS1: TClientSocket;
mes: String;
procedure FrmOnCreate(..);
begin
CS1.Port:=65535;
CS1.Host:='192.168.0.101';
mes:='';
end;
//В какой-либо процедуре вклюаем его:
procedure FrmOnMessage(..);
begin
mes:='hello';
CS1.Active:=true;
end;
procedure CS1OnConnect (.. Socket: TCustomWinSocket);
begin
Socket.SendText(mes); //отправляем сообщение
//или CS1.Socket.SendText(mes);
CS1.Active:=false; //и тут же отключаем
//или Socket.Close;
end;
Со стороны сервера:
сокет
var SS1: TServerSocket;
procedure FOnCreate(..);
begin
SS1.Port:=65535;
SS1.Active:=true;//сокет всегда включен
end;
procedure SS1OnRead(..Socket: TCustomWinSocket..);
begin
if Socket.ReceiveText='hello'
then Showmessage('hello');
end;
Клиент передает сообщение при каком-либо событии.
Сервер успешно получает сообщение.
Потом возникает ошибка "Asynchronous socket erro 10049" со стороны клиента
Подскажите, почему в этом простом коде возникает ошибка
"Asynchronous socket erro 10049"?
Вроде все легко и просто.
Здравствуйте, Ренат Байрамгулов!
А почему думаете, что асинхроной сокет сразу итправляет твой месидж?
Я думаю, что тьи закрьиваеш сокет до того как все сообщение поедет.
Ето проблем :)
Ответ отправил: Bochvarov NikB (статус: 10-ый класс)
Ответ отправлен: 04.06.2007, 21:57 Оценка за ответ: 4 Комментарий оценки: Дело в том, что сообщение доходит нормально. Ошибка возникает при отключении сокета. Я решил переделать программу: при каком-либо событии просто отправляю сообщение по заранее включенному сокету (например, включаю при FormCreate). И все работает корректно. Тем не менее спасибо за ответ.
Отвечает: PGM
Здравствуйте, Ренат Байрамгулов!
Сокет асинхронный - вот и проблема с закрытием сразу после отсылки сообщения - сообщение еще в очереди, а вы уже закрываете сокет. Правильнее было бы серверу получив сообщение отослать подтверждение о получении сообщения (например "ОК"), а клиенту подождать подтверждения, а то бросать трубку не дождавшись ответа (а в данном случае еще и не сказав ни слова) как-то неправильно ;).
Ответ отправил: PGM (статус: 7-ой класс)
Ответ отправлен: 04.06.2007, 22:29 Оценка за ответ: 4 Комментарий оценки: Такой способ я уже использовал. Ошибка по прежнему возникала. Я решил переделать программу: включаю сокет заранее, например, при FormCreate, а при каком-либо событии просто отправляю сообщение CS1.Socket.SendText(mess); Оказалось все легко и просто и без ошибок. Спасибо за помощь.
Вопрос № 90.009
Здравствуйте уважаемые эксперты. Подскажите пожалуйста, как реализовать градиентную заливку в RichEdit?
Отправлен: 04.06.2007, 20:04
Вопрос задал: Beginner (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Sashok
Здравствуйте, Beginner!
Посмотрите в Delphi World. www.delphiworld.narod.ru. Там в зазделе по графике есть градиентная заливка формы. А что форма, что РичЕдит канва у всех одинаковая :-). У RichEdit нет канвы.
(edited by Ерёмин А.)
Ответ отправил: Sashok (статус: 3-ий класс)
Ответ отправлен: 05.06.2007, 12:53
Вопрос № 90.091
Как можно считывать данные регистров параллельного порта(желательно без использования ассемблера)?
Отправлен: 05.06.2007, 11:25
Вопрос задал: NNTSeM (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Timoshin A.B.
Здравствуйте, NNTSeM!
Например вот так.
Надеюсь у вас не возникнут трудности разобраться.
Приложение:
--------- Если кого-то коробит моя манера общения, я хотел бы получать ОС.
Ответ отправил: Timoshin A.B. (статус: Студент)
Ответ отправлен: 05.06.2007, 12:00
Отвечает: Sashok
Здравствуйте, NNTSeM!
В NT системах прямой доступ к порту запрещён, поэтому и с ассемблером работать не будет. Для того чтобы обратиться к порту его открывают с помощью API функции CreateFile. Вместо имени файла указывается имя порта, например 'LPT1'. В параметрах открытия-создания файла всегда указывается open_existing, иначе работать не будет. Функция возвращает дескриптор открытого порта или номер ошибки. Чтение-запись осуществляется через API FileRead, FileWrite. Закрытие - CloseHandle. Готовый пример можно найти в книге Архангельского
по Delphi и в Delphi World на www.delphiworld.narod.ru.
Ответ отправил: Sashok (статус: 3-ий класс)
Ответ отправлен: 05.06.2007, 13:36
Отвечает: Градов Юрий Михайлович
Здравствуйте, NNTSeM!
Использовать команды Turbo Pascal
var value: Byte;
value:=port[$379]; { Прочитать из порта }
port[$379]:=value; { Записать в порт }
//где $379 № порта
--------- Глаза боятся - руки делают!
Ответ отправил: Градов Юрий Михайлович (статус: 10-ый класс)
Ответ отправлен: 05.06.2007, 14:43