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

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


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

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

Выпуск № 919
от 09.09.2007, 05:35

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


Вопрос № 100606: Доброго времени суток ув. эксперты. У меня такая проблема. Как передавать данные через сокет? С созданием клиента и сервера я уже разобрался. Подключение и передача текстовых сообщений проходят нормально. Например мне нужно передать содер...
Вопрос № 100644: Добрый день. Как отловить подключениеотключение USB-флэши. Спасибо....
Вопрос № 100681: Всем привет!!! У меня такой вопрос: как определить вставлен ли чистый диск в дисковод. DiskSize, DiskFree, GetVolumeInformation пробовал - не получилось. Может кто сталкивался с проблемой такого рода, за каждый ответ буду благодарен....

Вопрос № 100.606
Доброго времени суток ув. эксперты.
У меня такая проблема.
Как передавать данные через сокет?
С созданием клиента и сервера я уже разобрался. Подключение и передача текстовых сообщений проходят нормально. Например мне нужно передать содержимое массива
var a: array[1..100] of string; от сервера клиенту в аналогичный массив и обратно от клиента к серверу.
Как это сделать? Если можно пример приложения клиента и сервера.
Заранее всем благодарен.
Отправлен: 03.09.2007, 06:03
Вопрос задал: Алексей Акишин (статус: 2-ой класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: PGM
Здравствуйте, Алексей Акишин!

Передача структур сложнее чем строка осуществляется с использованием SendBuf вместо SendText. Однако, если структура содержит элементы с переменной длиной (а именно так реализованы строки в общем случае), то надо вручную заполнять буфер. Исходя из этого у вас есть 2 пути

1. Использовать "старые" Паскаль строки: определить массив как a : array[1..100] of String[255]; и передавать Socket.SendBuf(a, Sizeof(a));

2. Вычислить суммарную длину всех строк (не забывая про завершающий #0), выделить буфер такой длины, скопировать туда строки и передать буфер, а на сервере его "разобрать" обратно. Как вариант, сформировать единую строку вставляя разделитель строк (например, sTotal := sTotal + a[i] + #10;), и передавать уже этот текст.
Ответ отправил: PGM (статус: 9-ый класс)
Ответ отправлен: 03.09.2007, 09:02
Оценка за ответ: 5
Комментарий оценки:
Sendbuf почему-то никак не идет, выдает ошибку. Собрать строку можно (как вариант), но долго разбирать потом. Но все равно спасибо за помощь.

Отвечает: Gladiator
Здравствуйте, Алексей Акишин!
К примеру, можно использовать две посылки:

1-я: Тип данных 2-й посылки
2-я: Данные

Первой посылкой отправляешь текстовую строку:

Socket.SendText ('sd_massive').

Второй посылкой отправляешь данные типа TMas (см. приложение):

Socket.SendBuf(a, SizeOf(a));

Принимаем первую посылку и анализируем строку:
var
buff_mas: TMas;
if s= '' then
begin
s := Socket.ReceiveText;
Exit;
end;
if s = 'sd_massive' then
begin
Socket.ReceiveBuf(buff_mas, SizeOf(TMas));
s := '';
end;


Приложение:

Ответ отправил: Gladiator (статус: Студент)
Ответ отправлен: 03.09.2007, 09:22
Оценка за ответ: 4
Комментарий оценки:
Я и сам понимаю, что должно быть так, но не работает.


Вопрос № 100.644
Добрый день.
Как отловить подключениеотключение USB-флэши.
Спасибо.
Отправлен: 03.09.2007, 11:49
Вопрос задал: Бешенцев Матвей (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: PGM
Здравствуйте, Бешенцев Матвей!

Добавить обработчик WM_DEVICECHANGE c wparam = DBT_DEVNODES_CHANGED и проверить список дисков.
Ответ отправил: PGM (статус: 9-ый класс)
Ответ отправлен: 03.09.2007, 19:24
Оценка за ответ: 5
Комментарий оценки:
Спасибо


Вопрос № 100.681
Всем привет!!!
У меня такой вопрос: как определить вставлен ли чистый диск в дисковод.
DiskSize, DiskFree, GetVolumeInformation пробовал - не получилось.
Может кто сталкивался с проблемой такого рода, за каждый ответ буду благодарен.
Отправлен: 03.09.2007, 16:03
Вопрос задал: Бакалов Артем Маркович (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Mishell
Здравствуйте, Бакалов Артем Маркович!
если Вы имеете под "чистый диск" имеете ввиду диск на котором нет файлов и директорий - то можно попробовать найти их - например см. приложение

Приложение:

Ответ отправил: Mishell (статус: 5-ый класс)
Ответ отправлен: 03.09.2007, 16:27

Отвечает: Проходящий Мимо
Здравствуйте, Бакалов Артем Маркович!
Чистый диск или запорченный - для стандартного приложения всего-лишь ошибка файловой системы. Можно или нет записать что-то на диск без помощи специализированных программ не обойтись, написать же свою - непростая задача. Могу предложить функцию, корорая опредиляет готовность дискового устройства. В качестве параметра передаем букву устройства.

function IsDriveReady(DriveLetter: char): boolean;
var
OldErrorMode: Word;
OldDirectory: string;
begin
OldErrorMode := SetErrorMode(SEM_NOOPENFILEERRORBOX);
GetDir(0, OldDirectory);
{$I-}
ChDir(DriveLetter + ':');
{$I+}
if IoResult <> 0 then
Result := False
else
Result := True;
ChDir(OldDirectory);
SetErrorMode(OldErrorMode);
end;

Удачи.
---------
Carpe diem!
Ответ отправил: Проходящий Мимо (статус: 9-ый класс)
Ответ отправлен: 03.09.2007, 16:44

Отвечает: Shurka
Здравствуйте, Бакалов Артем Маркович!
Может быть поможет
GetDiskFreeSpace
Ответ отправил: Shurka (статус: 3-ий класс)
Ответ отправлен: 04.09.2007, 15:06
Оценка за ответ: 3
Комментарий оценки:
К сожалению этот вариант я тоже пробовал...


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

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

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

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

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


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


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

В избранное