Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 835
от 10.06.2007, 16:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 472, Экспертов: 88
В номере:Вопросов: 3, Ответов: 6


Вопрос № 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"?
Вроде все легко и просто.
Отправлен: 04.06.2007, 19:55
Вопрос задал: Ренат Байрамгулов (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Bochvarov NikB

Здравствуйте, Ренат Байрамгулов!
А почему думаете, что асинхроной сокет сразу итправляет твой месидж?
Я думаю, что тьи закрьиваеш сокет до того как все сообщение поедет.
Ето проблем :)
Ответ отправил: 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


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.52 от 02.05.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное