close

Вход

Забыли?

вход по аккаунту

?

Отчет(практика)

код для вставкиСкачать
Филиал федерального государственного бюджетного образовательного учреждения высшего профессионального образования
'' НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ '' МЭИ ''
в городе Смоленске
Кафедра вычислительной техники
Отчет по производственно-технологической практике в ФГУП СПО "Аналитприбор"
Студент:Полячков А.А.
Группа: ВМ-09
Руководитель
практики от Чураков М.П.
предприятия:
Руководитель
практики от Сухачев Н. И.
института:
Смоленск, 2012
Содержание
ВВЕДЕНИЕ3
1.Краткая характеристика предприятия4
2. Характеристика продукции7
3. Организационная структура предприятия9
4.Область применения продукции ФГУП СПО "Аналитприбор"12
4.1 Безопасность объектов космического назначения14
4.2 Подводный военно-морской флот14
4.3 Энергетика15
4.4 Металлургия15
4.5 Нефтедобыча и переработка16
4.6 Газодобыча и переработка16
4.7 ЖКХ17
4.8 Развитие 17
4.9 Социальное развитие 18
5.Индивидуальное задание20
5.1 Краткое описание компонгенты TServerSocket21
5.2 Серверное приложение23
5.3 Клиентское приложение 26
6. Общие требования охраны труда.28
6.1 Общие требования охраны труда.28
6.2 Требования охраны труда перед началом работы.29
6.3.Требования охраны труда во время работы.30
6.4. Требования охраны труда в аварийных ситуациях. 31
6.5. Требования охраны труда по окончании работы.33
7. Литература34
Приложение А35 Приложение Б39
ВВЕДЕНИЕ
ФГУП "СПО "АНАЛИТПРИБОР". В мае 2010 года предприятию исполнилось 50 лет. Это старейшие и крупнейшие технологически и наукоёмкое приборостроительное предприятие в Смоленской области. Оно владеет набором стандартных производственных процессов начиная с металлообработки и заканчивая изготовлением электронных плат, имеет уникальные технологии в области создания датчиков - сенсоров которые способны определить наличие определённого газа в воздухе. Предприятие располагает современным оборудованием, которое позволяет вести перспективные исследования и заниматься новыми разработками. Так же на предприятии есть уникальная газовая станция, которая позволяет настроить и протестировать любой прибор.
Предприятие действует на основе Устава. Бухгалтерский учёт на предприятии ведётся по начислению, т.е. по "отгрузке", а налогообложение по "оплате". На предприятии ведётся журнально-ордерная и таблично автоматизированная форма учёта. Все данные обрабатываются в АСУП.
Техника безопасности на предприятии организована очень хорошо. С каждым новым пришедшем на работу проводится индивидуальный инструктаж. 1. Краткая характеристика предприятия
Прежде чем перейти к освещению вопроса о производственной и управленческой структуре предприятия, несколько слов необходимо сказать о том, что Федеральное Государственное Унитарное Предприятие "Смоленское Производственное Объединение "Аналитприбор" по своей организационно-правовой форме является государственным предприятием с федеральной формой собственности. Предприятие не имеет:
-учредителей (участников) физических лиц;
-дочерних обществ;
-зависимых обществ;
-представительств;
-филиалов;
-обособленных подразделений.
Смоленское производственное объединение "Аналитприбор" разрабатывает и серийно выпускает газоаналитические приборы и системы на их основе, приборы для научных исследований, приборы и системы жизнеобеспечения специальных объектов.
Определенным и закономерным этапом научно-технического прогресса в жизни объединение можно считать 1973 года, когда при заводе было создано СКБ автоматизированных газоаналитических систем. Именно с 1973 года начинается серийное освоение выпуска разрабатываемых собственными силами приборов и систем газового анализа.
СПО "Аналитприбор" проводит широкие исследования физических, физико - химических, каталитических, оптических и других характеристик материалов для первичных сенсоров и измерительных преобразователей, позволяющих производить измерения газовых сред, разрабатывать и изготовлять широкий спектр газоаналитических приборов и систем.
Сегодня номенклатура объединения составляет более 160 наименований изделий и их модификаций. За 50 лет своей деятельности ФГУП "СПО "Аналитприбор" стало ведущим предприятием в Росси по разработке и серийному выпуску современных надежных средств контроля газовых и водных сред. изделий специальной техники.
Смоленское производственное объединение "Аналитприбор" - Российское производственное предприятие по выпуску сложной аналитической техники и товаров народного потребления, основанное в 1960 году.. Наукоемкость, техническая сложность, многоплановость и многопрофильность производимой продукции определяет уникальность, этого производственного объединения, способствующего эффективному решению задач в области безопасности и охраны труда, энерго - и ресурсосбережения, защиты окружающей среды и технологического контроля.
Широчайшая номенклатура изделий позволяет решать практически любую проблему газового анализа и помогает защищать и спасать людей по всей территории России и стран ближнего и дальнего зарубежья.
Широкий диапазон продукции - это лишь часть того, что предлагает ФГУП "СПО "Аналитприбор". Большое значение для потребителей газоаналитических приборов имеет высококвалифицированный персонал и гарантийное обслуживание.
Видами деятельности предприятия являются:
- научно-техническая разработка, метрологическое обеспечение, производство, ремонт и реализация газоаналитических систем и приборов по контролю за атмосферой, обеспечению охраны труда и техники безопасности и по регулированию технологических процессов в различных отраслях промышленности;
- научно-техническая разработка, производство, ремонт и реализация газоаналитических приборов и технических систем специального назначения;
- научно-техническая разработка, производство, ремонт и реализация товаров народного потребления.
Право осуществлять деятельность, на занятие которой необходимо получение лицензии, возникает с момента получения такой лицензии или в указанный в ней срок и прекращается по истечении срока ее действия, если иное не установлено законом или иными нормативными правовыми актами.
Задачи, поставленные перед коллективом ПО "Аналитприбор" следующие:
1. Обеспечение реализации на внутреннем и внешнем рынках продукции и услуг в соответствии с планом поступления выручки на счета объединения.
2. Изучение и использование конъюнктуры внутреннего и внешнего рынков, определение наилучших условий экспорта продукции и услуг, обеспечивающих наибольшие рублевые и валютные поступления.
3. Систематическое изучение и анализ достижений зарубежной науки и техники патентных и лицензионных материалов, опыта эксплуатации потребителями продукции объединения и аналогичной зарубежной продукции. Изучение достижений Российских предприятий-конкурентов.
4. Совершенствование планирования внутри.- и внешнеэкономической деятельности объединения.
5. Управление работой предприятия, направленное на повышение эффективности труда работников предприятия.
6. Расширение сферы применения продукции на внутреннем рынке и ее экспорта.
7. Изучение и определение (исследование) проблем в области аналитического контроля газообразных веществ в различных отраслях экономики с целью создания новой техники, и расширения рынка сбыта, а также расширение сферы применения серийно выпускаемой продукции объединения.
2. Характеристика продукции
За 50лет объединение освоило серийный выпуск приборов и систем автоматического контроля газовой и водной среды.
Для автоматизации и контроля технологических процессов в металлургии ПО "Аналитприбор" выпускает как отдельные газоаналитические приборы, так и комплексные системы для кислородно-конверторных цехов, процессов непрерывной разливки стали и т.д.
В нефтепереработке, нефтехимии, в газодобыче и химии - приборы по контролю порядка 130 ядовитых, взрывоопасных или легковоспламеняющихся жидкостей и газов.
Для энергетики поставляются приборы, осуществляющие контроль и управление процессами горения, минимизирующие затраты энергоресурсов в зонах технологического процесса, а также приборы контроля водно-химического режима энергоблоков. Приборы экологического контроля и безопасности - ориентированы на использование практически во всех отраслях промышленности, в том числе и в водных средах. В этой области ФГУП "СПО "Аналитприбор" специализируется на определении вредных веществ в воздухе рабочей зоны и атмосферы, в выбросах промышленных предприятий (в том числе пыли), а также в выхлопных газах автомобилей, тепловозов и судовых двигателей, выполненных в виде стационарных систем или переносных многокомпонентных приборов.
В области очистки и контроля качества воды - выпускаются высокоэффективные бытовые фильтры и приборы контроля ее важнейших показателей. В последние годы одной из важнейших концепций работы объединения является комплексный подход к автоматизации технологических процессов, например, шахтного оборудования для предотвращения и ликвидации аварийных ситуаций с использованием высокоточных аппаратных и программных средств, компьютерного оборудования. При этом объединение опирается на достигнутые "Ноу-хау" в области создания прецизионных датчиков контроля с использованием различных физико-химических методов анализа, на неустанной работе над повышением надежности и качества продукции, нацеленной на потребности рынка. Приборы экологического контроля и безопасности ориентированы на использование практически во всех отраслях промышленности, в том числе и в водных средах.
На сегодняшний день разработаны и серийно выпускаются многоканальная газоаналитическая система контроля атмосферы (СКАПО), на основании Федеральных Законов "О промышленной безопасности опасных производственных объектов" и "О защите населения и территорий от чрезвычайных ситуаций природного и технического характера", и уникальная стационарная газоаналитическая система оптимизации режимов горения за счет полного сгорания топлива и повышения КПД топливосжигающих установок (КОРЭС), на основании законодательства РФ, в рамках программы энергоресурсосбережения России, утвержденной правительством РФ.
3. Организационная структура
Согласно приказа №-99 от 19.04.99 г. о распределении функциональных обязанностей по руководству объединения Федерального государственного унитарного предприятия "Смоленского производственного объединения "Аналитприбор" организационная структура предприятия представлена на рис. 1.
Структура управления ФГУП "СПО" Аналитприбор"
Основные достоинства данной структуры:
1. Высокая степень разделения труда, что приводит к появлению высококвалифицированных специалистов в каждой должности;
2. Развитая иерархия управления, подчиненность и контроль низшего уровня высшим;
3. Развитая цепь команд, наличие многочисленных правил и норм поведения персонала;
4. подбор кадров по их деловым и профессиональным качествам.
Главный недостаток - отсутствие гибкости как по отношению к клиентам, так и во взаимоотношениях сотрудников внутри организации, незначительные возможности реагировать на происходящие изменения и вводить новшества.
Решая вопрос недостатков данной структуры ФГУП "СПО "Аналитприбор" детально прорабатывает все составляющие ее элементы. Для чего проводит департаментализацию, то есть разделение на составляющие части.
4.Область применения продукции ФГУП СПО "Аналитприбор"
Смоленское производственное объединение "Аналитприбор" тесно сотрудничает с научно-техническими подразделениями и институтами Федеральной службы безопасности Российской Федерации, Федеральной службы охраны Российской Федерации и другими правоохранительными органами.
Обладая уникальными технологиями, гибким производством, позволяющим обеспечивать в короткие сроки как единичное, так и серийное производство, СПО "Аналитприбор" вносит большой вклад в дело технического оснащения служб самыми современными специальными техническими средствами.
Одним из важнейших направлений деятельности предприятия является выпуск газоаналитической продукции. Невозможно представить ни одну отрасль народного хозяйства, в которой бы не использовалась продукция объединения. Основными направлениями ее применения являются:
обеспечение безопасной эксплуатации промышленных, коммунальных и бытовых объектов, а также личной безопасности персонала предприятий;
технологический мониторинг всевозможных газовых сред в целях повышения качества продукции и автоматизации технологических процессов;
контроль компонентного состава добываемого и транспортируемого природного газа;
контроль технических параметров химической подготовки воды;
экологический мониторинг одиночных и рассредоточенных источников выбросов загрязняющих веществ в атмосферу;
измерение компонентного состава выхлопных газов автомобильного, железнодорожного, морского и речного транспорта при его экологическом и технологическом контроле;
метрологическое обеспечение эксплуатации газоаналитической продукции.
Потребителями продукции СПО "Аналитприбор" являются предприятия нефтегазодобывающей, транспортирующей и перерабатывающей, химической и нефтехимической отраслей, предприятия черной и цветной металлургии, производства строительных материалов, тепловой и атомной энергетики, сельскохозяйственные предприятия, целлюлозно-бумажные комбинаты, транспортные и коммунальные организации и многие другие предприятия.
Вся выпускаемая предприятием продукция ориентирована на насущные проблемы рынка, комплектуется и видоизменяется в соответствии с пожеланиями заказчика, сертифицирована органами Госстандарта и разрешена к применению Ростехнадзором РФ. фффффффффффффффффффф
4.1 Безопасность объектов космического назначения
Обеспечение безопасности объектов космического назначения является основным условием безопасности освоения космоса. Современный космодром - это сложная инфраструктура, включающая в себя множество систем и комплексов, обеспечивающих соблюдение технологических процессов подготовки ракет к старту. Специалистами СПО "Аналитприбор" разработана, изготовлена и запущенна в эксплуатацию одна из таких систем - "Ангара". Она предназначена для контроля воздуха рабочей зоны помещений и открытых площадок космодрома, оповещения персонала о возникших аварийных ситуациях и выдачи управляющих команд в систему автоматического управления жизнеобеспечением объекта.
4.2 Подводный военно-морской флот
СПО "Аналитприбор" более 40 лет занимается разработкой и серийным изготовлением приборов и систем для объектов Министерства обороны Российской Федерации, в том числе: корабельных газоанализаторов, автоматических датчиков, морских и береговых радиоакустических станций.
Эксплуатация подводных судов военно-морского флота невозможна без применения выпускаемых предприятием стационарных корабельных газоанализаторов КГС-ДУМ, КГС-Ф, КГС-ОУ, поскольку именно эти приборы играют основную роль в жизнеобеспечении судна. Постоянный автоматический контроль содержания окиси и двуокиси углерода, фреонов в атмосфере судна позволяет автоматически поддерживать заданные параметры его воздушной среды, создавая комфортную среду для экипажа судна. На надводных судах используются такие приборы, как СТМ-10Р, СГГ-20Р, АНКАТ-7631М-Р.
4.3 Энергетика
ФГУП СПО "Аналитприбор" осуществляет разработку и выпуск газоаналитических приборов и вспомогательного оборудования для АЭС, ТЭЦ и ГРЭС.
Для атомной энергетики в объединении выпускают следующие системы: ГТВ-1101М-А, ГТВ-1101ВЗ-А, ГТМ-5101 М-А, ГТМ-5101ВЗ-А, КГО. Они предназначены для контроля воздуха рабочей зоны, водорода и кислорода в зонах локализации аварий, водорода при охлаждении генераторов турбоустановок, окиси и двуокиси углерода в системе газового контура.
Продукция Смоленского производственного объединения "Аналитприбор" применяется на всех атомных станциях РФ. Кроме отечественных АЭС она поставлялась в Иран (АЭС "Бушер"), Индию (АЭС "Куданкулам").
Продукция объединения используется на предприятиях теплоэнергетики для измерения концентрации кислорода в дымовых газах с целью поддержания оптимального режима горения (АКВТ, КГО, АНКАТ-310), контроля параметров водоподготовки (АНКАТ-7655, АП-430, рН-электроды), контроля чистоты водорода (ДАМ, БПС-21М), измерения компонентного состава дымовых газов для расчета валовых выбросов в атмосферу загрязняющих веществ при экологическом мониторинге (АНКАТ-310, ГАММА-100, АНКАТ-410, КГО).
4.4 Металлургия
Продукция ФГУП СПО "Аналитприбор" применяется на предприятиях черной, цветной металлургии и в коксохимическом производстве при мониторинге технологических газовых сред (прямой и обратный циркуляционный газ установок тушения кокса, доменный, колошниковый, дутьевой и другие газы) с целью повышения качества продукции и автоматизации технологических процессов (ГАММА-100, КГО), при контроле работы воздухоразделительных установок (АНКАТ-500, ГАММА-100), оптимизации и работы пылеулавливающих установок (ИКВЧ(с), ИКВЧ(п), ПИКП-Т), при экологическом мониторинге (АНКАТ-310, ГАММА-100, АНКАТ-410, КГО), при измерении параметров работы систем химической подготовки воды и очистных сооружений (АП-430, рН-электроды, АНКАТ-7645) и при обеспечении безопасности промышленных объектов (СТМ-10, СТМ-30, ДАТ-М, ДАХ-М, ДАМ, БПС-21М, СКАПО, АНКАТ-7631М, СГГ-20, АНКАТ-7664М).
4.5 Нефтедобыча и переработка
На нефтедобывающих и перерабатывающих предприятиях продукция ФГУП СПО "Аналитприбор" применяется для обеспечения безопасной эксплуатации объектов и работы персонала, обнаружения в воздухе рабочей зоны токсичных и горючих газов (ГИАМ-315, АНКАТ-7631М, АНКАТ-7664М, СГГ-20, СТМ-10, СТМ-30, ДАК, ДАТ-М, ДАХ-М, ДАМ, БПС-21М, СКАПО), технологического контроля процессов органического синтеза (ГАММА-100, ХРОМАТ-ЭОО, КГО), оптимизации режимов горения на печах подогрева нефти (АКВТ-02), проведения экологического мониторинга предприятий (АНКАТ-310, ПАЛЛАДИЙ-ЗМ, ГАММА-100, АНКАТ-410, КГО).
4.6 Газодобыча и переработка
На газодобывающих и газоперерабатывающих предприятиях продукция СПО "Аналитприбор" используется для обеспечения безопасной эксплуатации объектов и работы персонала, обнаружения в воздухе рабочей зоны токсичных и горючих газов, (АНКАТ-7631М, АНКАТ-7664М, СГГ-20, СТМ-10, СТМ-30, ДАК, ДАТ-М, ДАХ-М, ДАМ, БПС-21М, СКА- ПО), измерения компонентного состава и серо- содержания добываемого и поставляемого потребителям природного газа (ХРОМАТ-900), степени одоризации природного газа на ГРС (АНКАТ-7670) и проведения экологического мониторинга газоперекачивающих станций и газоперерабатывающих заводов (АНКАТ-310, ПАЛЛАДИЙ-ЗМ, ГАММА-100, АНКАТ-410, КГО).
4.7 ЖКХ
В жилищно-коммунальном комплексе приборы СПО "Аналитприбор" применяются для оптимизации режимов горения котельных установок (AKBT, Оптима, АНКАТ-310), контроля режимов химической подготовки воды (АН- КАТ-7655, АП-430, рН-электроды), обеспечения безопасных условий работы персонала котельных, обнаружения угарного и горючих газов с автоматической отсечкой подачи топлива (СГГ-6М, СТГ-1, СОУ-1, СТГ-3, БПС-3, КЭГ-9720, СГГ-20, АНКАТ-7631М, ИТ-М), контроля степени одоризации газа, поставляемого потребителю (ИЗО, ОРГО), обнаружения утечек топливного газа в жилых помещениях многоэтажных зданий и автоматического прекращения его подачи (СГГ10-Б, КЭГ-9720), перекрытия подачи газа при возникновении возгорания (КТЗ).
4.8 Развитие В СПО "Аналитприбор" огромное внимание уделяется развитию социальной сферы.
В феврале 1986 г. торжественно вручили ордера на квартиры сорока семьям приборостроителей. Двумя годами раньше, в 1984 г., было сдано общежитие для молодых рабочих на 120 мест. В 1987 г. началось строительство нового 161-квартирного дома. В это же время строился молодежно-жилищный комплекс в Киселевке, квартиры в котором получили около ста работников объединения. А в начале 90-х был построен 340-квартирный дом в Семичевке. Таким образом, 760 семей работников СПО "Аналитприбор" улучшили свои жилищные условия, и острый квартирный вопрос на предприятии был решен.
В здравпункте объединения проводит прием врач-терапевт, работает клиническая лаборатория, процедурный и перевязочный кабинеты. Проводятся периодические, углубленные медосмотры работников, занятых на работах с вредными производственными факторами. Заболевшие работники могут вызвать врача на дом.
За счет средств предприятия и профсоюзной организации осуществляется санаторно-курортное оздоровление работников. Путевки труженикам объединения предоставляются бесплатно.
4.9 Социальное развитие В СПО "Аналитприбор" огромное внимание уделяется развитию социальной сферы.
В феврале 1986 г. торжественно вручили ордера на квартиры сорока семьям приборостроителей. Двумя годами раньше, в 1984 г., было сдано общежитие для молодых рабочих на 120 мест. В 1987 г. началось строительство нового 161-квартирного дома. В это же время строился молодежно-жилищный комплекс в Киселевке, квартиры в котором получили около ста работников объединения. А в начале 90-х был построен 340-квартирный дом в Семичевке. Таким образом, 760 семей работников СПО "Аналитприбор" улучшили свои жилищные условия и острый квартирный вопрос на предприятии был решен.
В здравпункте объединения проводит прием врач-терапевт, работает клиническая лаборатория, процедурный и перевязочный кабинеты. Проводятся периодические, углубленные медосмотры работников, занятых на работах с вредными производственными факторами. Заболевшие работники могут вызвать врача на дом.
За счет средств предприятия и профсоюзной организации осуществляется санаторно-курортное оздоровление работников. Путевки труженикам объединения предоставляются бесплатно.
На базе оздоровительного комплекса предприятия в поселке Колодня организован круглогодичный 7-дневный отдых и отдых "выходного дня" для работников объединения и членов их семей. В оздоровительном лагере в период зимних и летних каникул отдыхают дети сотрудников СПО "Аналитприбор".
Экскурсионные туры по России, в страны ближнего и дальнего зарубежья позволяют работникам объединения не только отдохнуть, но и познакомиться с историей и культурой посещаемых мест.
5. Индивидуальное задание
Необходимо создать удаленный файловый менеджер с возможностью просматривать историю посещений сервера и произведенных действий на нем. При помощи данной программы на сервере может выкладываться документация, подлежащая к ознакомлению или программы для дальнейшего скачивания на компьютеры сети. Данную задачу будем решать при помощи клиент сервера на основе сокетов. Сервер, основанный на сокетном протоколе, позволяет обслуживать сразу множество клиентов. Причем, ограничение на их количество можно указать самим (или вообще убрать это ограничение). Для каждого подключенного клиента сервер открывает отдельный сокет, по которому происходит обмен данными с клиентом. Мы будем использовать синхронный режим работы. Нам необходимо создать 2 приложения: одно для клиента, другое для сервера.
Функции сервера:
* Управление ресурсом общего доступа(добавление/удаление).
* Отслеживание действия клиента на сервере(подключение/отключение,просмотр,скачивание).
* Предоставление информации клиентам.
Функции клиента:
* Просмотр ресурса.
* Скачивание данных.
Для решения данной задачи мы будем использовать компоненты TServerSocket и TClientSocket.
5.1Краткое описание компонента TServerSocket
Свойства:
Socket - класс TServerWinSocket, через который Вы имеете доступ к открытым сокетным каналам.
ServerType - тип сервера. Может принимать одно из двух значений:stNonBlocking - синхронная работа с клиентскими сокетами. При таком типе сервера Вы можете работать с клиентами через событияOnClientRead иOnClientWrite.stThreadBlocking - асинхронный тип. Для каждого клиентского сокетного канала создается отдельный процесс (Thread). Тип:TServerType;
ThreadCacheSize- количество клиентских процессов (Thread), которые будут кэшироваться сервером. Здесь необходимо подбирать среднее значение в зависимости от загруженности Вашего сервера. Кэширование происходит для того, чтобы не создавать каждый раз отдельный процесс и не убивать закрытый сокет, а оставить их для дальнейшего использования.Тип: Integer;
Active - показатель того, активен в данных момент сервер, или нет. Т.е., фактически, значение Trueуказывает на то, что сервер работает и готов к приему клиентов, аFalse - сервер выключен. Чтобы запустить сервер, нужно просто присвоить этому свойству значениеTrue. Тип:Boolean;
Port - номер порта для установления соединений с клиентами. Порт у сервера и у клиентов должны быть одинаковыми. Рекомендуются значения от 1025 до 65535, т.к. от 1 до 1024 - могут быть заняты системой. Тип:Integer;
Service - строка, определяющая службу (ftp, http,pop, и т.д.), порт которой будет использован. Это своеобразный справочник соответствия номеров портов различным стандартным протоколам. Тип:string;
Методы:
Open - Запускает сервер. По сути, эта команда идентична присвоению значения TrueсвойствуActive;
Close - Останавливает сервер. По сути, эта команда идентична присвоению значения FalseсвойствуActive.
События:
OnClientConnect - возникает, когда клиент установил сокетное соединение и ждет ответа сервера (OnAccept);
OnClientDisconnect- возникает, когда клиент отсоединился от сокетного канала;
OnClientError - возникает, когда текущая операция завершилась неудачно, т.е. произошла ошибка;
OnClientRead - возникает, когда клиент передал берверу какие-либо данные. Доступ к этим данным можно получить через пеаедаваемый параметр Socket: TCustomWinSocket;
OnClientWrite - возникает, когда сервер может отправлять данные клиенту по сокету;
OnGetSocket - в обработчике этого события Вы можете отредактировать параметрClientSocket;
OnGetThread - в обработчике этого события Вы можете определить уникальный процесс (Thread) для каждого отдельного клиентского канала, присвоив параметруSocketThread нужную подзадачу TServerClientThread;
OnThreadStart,OnThreadEnd - возникает, когда подзадача (процесс, Thread) запускается или останавливается, соответственно;
OnAccept - возникает, когда сервер принимает клиента или отказывает ему в соединении;
OnListen - возникает, когда сервер переходит в режим ожидания подсоединения клиентов.
5.2 Серверное приложение:
Рис 1. "Сервер"
На Рисунке 1 представлена экранная форма программы. Вкладка "История" открывает историю посещения сервера, указывает действие, время и пользователя. Пользователь определяется при подключении клиента к программе по следующему алгоритму:
* При подключении клиент передает на сервер имя своего компьютера.
* Сервер данному клиенту передает порядковый номер, который в дальнейшем будет использовать клиент при обращении к серверу, и при обращении сервера к клиенту(он передается вместе с блоком данных).
Используя вкладку "Редактор" и происходит само управление общим ресурсом. Компонента с выпадающим списком (combobox) отвечает за выбор пути (или выбор диска), а левое поле(listbox) выводит содержимое по указанному пути. При добавлении файла/папки отображается только его имя, а путь сохраняется в массиве, который в последствии и будет передаваться клиенту, чтобы избежать путаницы с одинаковыми именами файлов/папок. Компонента выход закрывает сервер и само приложение.
Обмен между клиентом и сервером происходит путем передачи текстовых сообщений(инициализация, предоставление перечня общего ресурса) и массива (передача файлов). Если передаваемый файл большой он разбивается на блоки. Код передачи файлов:
t:=tfilestream.Create(s2,fmopenread); // создаем поток if t=nil then showmessage('Ошибка загрузки файла в поток')
t.Seek(0,sofrombeginning);
size:=t.Seek(0,sofromend);
serversocket1.Socket.Connections[i].SendBuf(size,4);
t.Seek(0,sofrombeginning);
if serversocket1.Socket.Connections[i].SendStream(t) then
begin
StringGrid1.rowCount:=StringGrid1.rowCount+1;
StringGrid1.cells[0,StringGrid1.rowCount-1]:=polz1;
StringGrid1.cells[1,StringGrid1.rowCount-1]:='загрузил ' +s2;
StringGrid1.cells[2,StringGrid1.rowCount-1]:=TimeToStr(SysUtils.Time);
end
Алгоритм работы серверного приложения:
* Формирование списка дисков на компьютере.
* Создание списка "общего доступа", и сохранение полного пути по каждой позиции в массив.
* Сканирование порта, при подключении клиента(ключевое слово "new" чтение его имени, присваивание ему уникального номера, передача массива "общего доступа"(передаются только пути)), ключевое слово "sen" в начале сообщение отвечает на запрос в скачивании файла по пути, следующему за "sen", ключевое слово "zapros" означает о необходимости в предоставлении клиенту списка "общего доступа", отсутствие ключевого поля означает. запрос на предоставлении списка донных по указанному пути в сообщении.
* Ответ клиенту на его запрос и продолжение сканирования порта.
Создание перечня дисков:
w := GetLogicalDrives;
Root := '#:\';
for i := 0 to 25 do
begin
Root[1] := Char(Ord('A') + i);
if (W and (1 shl i)) > 0 then
if (GetDriveType(Pchar(Root)) = DRIVE_FIXED) or
(GetDriveType(Pchar(Root)) = DRIVE_removable)
then
begin
combobox1.Items.Add(Root);
nom1:=nom1+1;
end;
end;
Вывод перечня файлов по указанному пути:
procedure SpisF(pytb:string);
begin
form1.ListBox1.Clear;
if FindFirst(pytb+'*.*', faDirectory, sr ) = 0 then
begin
repeat
if sr.name <> '.' then
form1.ListBox1.Items.Add(sr.Name)
else
until FindNext(sr) <> 0;
FindClose(sr);
for i:=0 to form1.listbox1.items.Count-1 do
begin
b[i]:=form1.listbox1.items[i];
end;
end;
end;
5.3 Клиентское приложение:
Рисунок 2 "Клиент".
Для подключения клиента к серверу нам необходимо указать порт по которому будет происходить обмен и IP адрес сервера, данный настройки вводятся в вкладке "Настройка" и сохраняются при корректном выходе из приложения (через вкладку "Выход").
Рисунок 3 "клиент и сервер"
Панель настройки исчезнет при любом действии не связанном с настройкой подключения. При подключении компьютера к серверу, нам необходимо передать ему имя компьютера, для этого нам необходимо его получить:
Код инициализации компьютера:
function GetComputerName: string;
var
buffer: array[0..255] of char;
size: Cardinal;
begin
size := 256;
windows.GetComputerName(@buffer, size);
Result := strPas(buffer);
end;
Общение с сервером происходит на основе метода SendText, где в сообщении указывается необходимое действие и путь, так например sen означает что надо передать файл по указанному в сообщении пути, при этом необходимо настроить клиент на прием массива данных.
Код приема данных:
if priem=1 then
begin
if startfile then
begin
Socket.ReceiveBuf(size,256);
if size=0 then exit;
size1:=size;
t:=tfilestream.Create(priem1,fmCreate);
startfile:=false;
t.seek(0,sofrombeginning);
end;
length1:=socket.ReceiveLength;
t.WriteBuffer(buf,length1);
if length1>0 then
begin
size:=size-length1;
ProgressBar1.Position := 100*(size1-size) div size1;
end;
if (size<0) or (size=0) then
begin
t.Free;
//priem:=0;
startfile:=true;
label3.Caption:='Готово';
6. Общие требования охраны труда.
1.1. Настоящая инструкция распространяется на пользователей ПЭВМ.
1.2. К работе на ПЭВМ допускаются лица : прошедшие вводный инструктаж по охране труда, прошедшие обучение безопасным приемам и методам труда с вычислительной техникой и проверку знаний, включающую проверку знаний по электробезопасности с присвоением I квалификационной группы по электробезопасности, прошедшие первичный инструктаж по охране труда на конкретном рабочем месте.
1.3. В соответствии с правилами внутреннего трудового распорядка, все работники объединения обязаны твердо знать и соблюдать требования охраны труда, производственной санитарии и пожарной безопасности, требования по выполнению режимов труда и отдыха.
1.4. Работники должны проходить повторный инструктаж по безопасности труда не реже одного раза в квартал.
1.5. Работники должны выполнять свои обязанности согласно имеющейся квалификации. При недостаточной квалификации работники должны работать под наблюдением более опытного работника назначенного руководителем подразделения.
1.6. Пользователь ПЭВМ должен хорошо знать и строго соблюдать все требования, изложенные в настоящей инструкции, а администрация подразделения обязана создать нормальные условия для безопасности выполнения работ. 1.7. В процессе труда пользователь ПЭВМ подвергается воздействию вредных факторов со стороны ПЭВМ и видеодисплейных терминалов (ВДТ). В связи с этим:
1.7.1. Пользователь ПЭВМ на протяжении рабочей смены обязан соблюдать установленный регламент работы , в соответствии с требованиями СанПин 2.2.2/2.4.1340-03 об охране труда работников, занятых эксплуатацией ПЭВМ и ВДТ.
1.7.2. Женщины со времени установления беременности и в период кормления ребенка грудью к выполнению всех видов работ, связанных с использованием ПЭВМ и ВДТ не допускаются.
1.8. Пользователь ПЭВМ должен:
1.8.1. Выполнять ту работу, которая ему поручена и на том оборудовании, которое предназначено для выполнения данной работы согласно инструкции и сменного задания.
1.8.2. Знать требования межотраслевых правил по охране труда при эксплуатации электроустановок (ПОТ РМ-016-2001), уметь оказывать помощь доврачебную пострадавшим от электрического тока (ИОТ 16-2005).
1.8.3. При несчастном случае прекратить работу, поставить в известность администрацию подразделения и обратиться в здравпункт. При несчастном случае с работником непременно вызвать медработника из здравпункта, одновременно о случившемся поставить в известность администрацию подразделения и приступить к оказанию доврачебной помощи пострадавшему. При расследовании причин несчастного случая, обязан сообщить комиссии известные ему обстоятельства происшествия.
1.19. Виновные в нарушении настоящей инструкции привлекаются к ответственности согласно действующему законодательству и правилам внутреннего трудового распорядка объединения.
6.2 Требования охраны труда перед началом работы.
2.1. Привести в порядок рабочую одежду.
2.2. Осмотреть и привести в порядок рабочее место, убрать все посторонние предметы, освободить установленные габариты проходов, рабочую документацию, канц. принадлежности, оргоснастку, и расходные материалы расположить так, чтобы не было ограничения доступа к пультам управления, исключалась возможность их попадания в работающие устройства.
2.3. Принять от ремонтно-технического персонала оборудование ПЭВМ в исправном состоянии, с исправными кабелями питания, шинами защитного заземления, установленными защитными панелями и кожухами.
2.4. Приступить к работе лишь при достаточном уровне освещенности рабочего места
6.3.Требования охраны труда во время работы.
3.1. Пользователь ПЭВМ во время работы обязан выполнять только ту работу, которая ему была поручена, и по которой он был проинструктирован.
3.2. Пользователь ПЭВМ должен помнить, что первичные цепи источников питания, цепи питания электродвигателей, розетки, рубильники, кабели электрической сети находятся под напряжением опасным для жизни человека. Запрещается включать и отключать разъемы, находящиеся под напряжением.
3.3. Соблюдайте правила эксплуатации устройств ЭВМ. Включать и отключать устройства ЭВМ можно лишь согласно инструкции по эксплуатации каждого конкретного устройства.
3.4. Не дотрагивайтесь до токоведущих частей и следите за исправностью защитного заземления.
3.5. Не дотрагивайтесь до вращающихся и движущихся частей оборудования. 3.6. В случае возникновения остановки связанной с застреванием бумаги, запутыванием красящей ленты, ошибок и сбоев в работе устройств, немедленно вызывать представителя ремонтно-технического персонала. 3.7. Замену бумаги производить лишь после выключения и полной остановки механизма печатающего устройства. 3.8. Не прикасаться одновременно к различным устройствам, входящим в состав ЭВМ.
6.4. Требования охраны труда в аварийных ситуациях. 4.1. При возникновении аварии необходимо:
- отключить работающее оборудование;
-если есть пострадавшие, оказать необходимую доврачебную помощь.
-поставить в известность администрацию подразделения.
При несчастном случае необходимо обеспечить обстановку до начала расследования на момент происшествия.
4.2. При возникновении пожара необходимо:
-отключить работающее оборудование;
-отключить вентиляцию;
-при небольшом очаге возгорания попытаться затушить огонь подручными средствами;
-при большом очаге возгорания немедленно поставить в известность администрацию подразделения и позвонить по тел. 3-90, 7-44, 6-41;
-до прибытия пожарных принять меры к нераспространению и тушению очага посредством огнетушителей, песка, воды;
-при тушении электрооборудования пользоваться пенными огнетушителями и водой запрещено;
-при наличии рядом с очагом баллонов с газом необходимо их перевезти в безопасное место.
4.3. При поражении электрическим током необходимо, прежде всего, отключить напряжение и освободить пострадавшего от действия электротока. Вызвать врача и до его прихода оказать доврачебную помощь - положить пострадавшего на спину, расстегнуть одежду, открыть окно, при необходимости сделать искусственное дыхание и непрямой массаж сердца.
4.4. При отравлении парами вредных веществ пострадавшего необходимо вывести на свежий воздух, освободить от стесняющей дыхание одежды, дать теплой воды. При потере сознания поднести к носу нашатырный спирт. При раздражении слизистой оболочки глаз, полости рта и носа обильно промыть глаза 2% раствором соды, в нос несколько капель "Нафтизина". При попадании на кожу ядовитых веществ тщательно промыть кожу теплой водой с мылом.
4.5. При ожогах следует осторожно снять одежду или обувь, не притрагиваясь к месту ожога, наложить повязку и отправить пострадавшего в здравпункт. Места ожогов смачивать и смазывать не рекомендуется.
4.6. При порезах и небольших ранениях необходимо смазать рану йодом, затем перевязать ее чистым бинтом; промывать рану водой нельзя. Если травма сопровождается обильным кровотечением, необходимо выше раны наложить жгут(под жгут вложить записку с временем наложения, т.к. жгут не может находиться более 1 часа). При ранении, ушибе или засорении глаз необходимо немедленно отправлять пострадавшего к врачу. Нельзя тереть глаза, так как это приводит к раздражению слизистой оболочки. При мягких ушибах на ушибленное место накладывают холодный компресс (платок, смоченный холодной водой). При тяжелых ушибах положить пострадавшего на носилки и отправит в здравпункт.
4.7. При тепловом ударе, происшедшем вследствие перегрева тела, пострадавшего следует положить в прохладное место без сквозняков, расстегнуть одежду, вызвать врача.
4.8. При переломах конечностей из подручных средств наложить шину и отправить пострадавшего к врачу.
6.5. Требования охраны труда по окончании работы.
5.1. При окончании работы обесточить оборудование.
5.2. Привести в порядок рабочее место.5.3 Снять спецодежду и убрать в специально предназначенное место. Вымыть руки водой с мылом.
7. Список использованной литературы:
1. Delphi 7. Основы программирования. Решение типовых задач. Самоучитель: Л. М. Климова - Санкт-Петербург, КУДИЦ-Образ, 2006 г.- 480 с.
2. Delphi на примерах: Виктор Пестриков, Артур Маслобоев - Москва, БХВ-Петербург, 2005 г.- 496 с.
Приложение А(Клиент)
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp, StdCtrls, ExtCtrls, Grids, ComCtrls, Menus;
type
TForm1 = class(TForm)
pnl1: TPanel;
ClientSocket1: TClientSocket;
ListBox1: TListBox;
ProgressBar1: TProgressBar;
MainMenu1: TMainMenu;
C1: TMenuItem;
N2: TMenuItem;
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Label3: TLabel;
Label4: TLabel;
procedure btn2Click(Sender: TObject);
procedure ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure ListBox1DblClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure C1Click(Sender: TObject);
procedure pnl1Click(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
procedure ListBox1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure ProgressBar1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure N2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
p:array [0..1,0..100] of string;
d:boolean;
size,nach,priem:integer;
t:tfilestream;
startfile:boolean;
p1,p2:integer;
pytb,priem1:string;
F11: textfile;
MS:TMemoryStream;
name1:string; //Для файлика буфер
implementation
function GetComputerName: string;
var
buffer: array[0..255] of char;
size: Cardinal;
begin
size := 256;
windows.GetComputerName(@buffer, size);
Result := strPas(buffer);
end;
{$R *.dfm}
procedure TForm1.btn2Click(Sender: TObject);
begin
//ClientSocket1.Socket.SendText(mmoSendText.Text); /
end;
procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Form1.Caption := 'Подключились к ' + edit2.text;
end;
procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
form1.Caption := 'Связь разорвана';
listbox1.items.clear;
end;
procedure TForm1.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
ErrorCode :=0;
end;
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var
s,s1,s2:string;
len: Byte;
k,i,j,j1,i1,l,size1:integer;
buf:array [0..100000] of byte;
length1:integer;
begin
if priem=1 then
begin
if startfile then
begin
Socket.ReceiveBuf(size,256);
//Listbox1.Items.Add('Размер файла '+inttostr(size));
if size=0 then exit;
size1:=size;
t:=tfilestream.Create(priem1,fmCreate);
if t=nil then //listbox1.Items.Add('Ошибка создания файла')
else //listbox1.Items.Add('Файл создан');
startfile:=false;
t.seek(0,sofrombeginning);
end;
length1:=socket.ReceiveLength;
if socket.ReceiveBuf(buf,length1)<>0 then
//showmessage(inttostr(length1)+' байт считано в буфер')
//listbox1.Items.Add(inttostr(length1)+' байт считано в буфер')
else listbox1.Items.Add('Ошибка записи в буфер');
t.WriteBuffer(buf,length1);
if length1>0 then
begin
size:=size-length1;
ProgressBar1.Position := 100*(size1-size) div size1;
end;
if (size<0) or (size=0) then
begin
t.Free;
//priem:=0;
startfile:=true;
label3.Caption:='Готово';
// priem:=false;
//listbox1.Items.Add('Файл уcпешно передан');
end;
end
else
begin
if d=true then
begin
d:=false;
ClientSocket1.Socket.SendText('new'+name1);
end;
pytb:='';
s:=Socket.ReceiveText();
s2:=s;
s1:='';
for i:=1 to 100 do
begin
j1:=pos('\',s);
if j1<>0 then
begin
j:=j1;
s[j]:='q';
end
else
break
end;
s:=s2;
for i:=j+1 to length(s) do
begin
s1:=s1+s[i];
end;
for i:=1 to j do
begin
pytb:=pytb+s2[i];
end;
//showmessage(pytb);
listbox1.Items.add(s1);
i1:=i1+1;
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
MS.Free; //Уничтожаем буфер
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
MS := TMemoryStream.Create; // Создаём буфер для файла
name1:=GetComputerName;
priem:=0;
GroupBox1.Visible:=false;
Form1.Caption:='Клиент';
nach:=0;
end;
procedure TForm1.ListBox1DblClick(Sender: TObject);
var stroka,stroka1:string;
istr,i:integer;
begin
label3.Caption:='загрузка %';
GroupBox1.Visible:=false;
if listBox1.Items[listBox1.ItemIndex]<>'..' then nach:=nach+1;
stroka:=pytb+listbox1.Items[listbox1.itemindex];
if (ExtractFileExt(listBox1.Items[listBox1.ItemIndex])='') or (listBox1.Items[listBox1.ItemIndex]='..') then
begin
if listBox1.Items[listBox1.ItemIndex]='..' then
begin
nach:=nach-1;
if nach=0 then
begin
ClientSocket1.Socket.SendText('zapros');
listbox1.items.clear;
exit;
end;
stroka:=pytb+listbox1.Items[listbox1.itemindex];
for i:=1 to length(stroka)-3 do
begin
if stroka[i]='\' then
istr:=i;
end;
for i:=1 to istr-1 do
stroka1:=stroka1+stroka[i];
stroka:=stroka1;
end;
ClientSocket1.Socket.SendText(stroka);
listbox1.items.clear;
pytb:='';
end
else
begin
ClientSocket1.Socket.SendText('sen'+pytb+listbox1.Items[listbox1.itemindex]);
priem1:=listbox1.Items[listbox1.itemindex];
priem:=1;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ClientSocket1.Port := StrToInt(edit1.text);
ClientSocket1.Address := edit2.text;
ClientSocket1.Active :=True;
startfile:=true;
d:=true;
end;
procedure TForm1.C1Click(Sender: TObject);
var pp:string;
Varf:TextFile;
begin
GroupBox1.Visible:=true;
AssignFile (Varf,'IP.txt');
Reset(Varf);
read(Varf,pp);
if pp<>'' then edit2.Text:=pp;
closefile(Varf);
end;
procedure TForm1.pnl1Click(Sender: TObject);
begin
GroupBox1.Visible:=false;
end;
procedure TForm1.ListBox1Click(Sender: TObject);
begin
GroupBox1.Visible:=false;
end;
procedure TForm1.ListBox1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
GroupBox1.Visible:=false;
end;
procedure TForm1.ProgressBar1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
GroupBox1.Visible:=false;
end;
procedure TForm1.N2Click(Sender: TObject);
var pp:string;
Varf:TextFile;
begin
AssignFile (Varf,'IP.txt');
Rewrite(Varf);
write(Varf,edit2.text);
closefile(Varf);
form1.Close;
end;
end.
Приложение Б(сервер):
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, ScktComp, IdBaseComponent, IdComponent,
IdIPWatch, Grids, Menus;
type
TForm1 = class(TForm)
ServerSocket1: TServerSocket;
ClientSocket1: TClientSocket;
IdIPWatch1: TIdIPWatch;
Button5: TButton;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
GroupBox1: TGroupBox;
ListBox1: TListBox;
ListBox2: TListBox;
ComboBox1: TComboBox;
Label3: TLabel;
Label4: TLabel;
Button4: TButton;
GroupBox2: TGroupBox;
StringGrid1: TStringGrid;
Button6: TButton;
procedure FormCreate(Sender: TObject);
procedure ComboBox1Click(Sender: TObject);
procedure ListBox1DblClick(Sender: TObject);
procedure ListBox1KeyPress(Sender: TObject; var Key: Char);
procedure ServerSocket1Listen(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1Accept(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1ClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
procedure ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1ClientWrite(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1GetSocket(Sender: TObject; Socket: Integer;
var ClientSocket: TServerClientWinSocket);
procedure ServerSocket1GetThread(Sender: TObject;
ClientSocket: TServerClientWinSocket;
var SocketThread: TServerClientThread);
procedure ServerSocket1ThreadEnd(Sender: TObject;
Thread: TServerClientThread);
procedure ServerSocket1ThreadStart(Sender: TObject;
Thread: TServerClientThread);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N1Click(Sender: TObject);
procedure N3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
buf: array [0..100,0..100] of string;
a,b,c,c1: array [1..1000] of string;
hist: array [0..2,0..1000] of string;
s,pytb,g,time,s2,polz1:string;
sr: TSearchRec;
ist,d:boolean;
ld : DWORD;
i,j,i1,nom,nom1,mas,size: integer;
t:Tfilestream;
Form1: TForm1;
implementation
procedure SendFileBySocket(filename: string);
var srcfile: TFileStream;
begin
srcfile := TFileStream.Create(filename,fmOpenRead);
form1.ServerSocket1.Socket.Connections[0].SendStream(srcfile);
srcfile.Free;
end;
procedure SpisF(pytb:string);
begin
form1.ListBox1.Clear;
if FindFirst(pytb+'*.*', faDirectory, sr ) = 0 then
begin
repeat
if sr.name <> '.' then
form1.ListBox1.Items.Add(sr.Name)
else
until FindNext(sr) <> 0;
FindClose(sr);
for i:=0 to form1.listbox1.items.Count-1 do
begin
b[i]:=form1.listbox1.items[i];
end;
end;
end;
//procedure strpoisk()
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
w: dword;
Root: string;
i,DiskType: integer;
f:textfile;
begin
Form1.Caption:='Сервер';
stringgrid1.Cells[0,0]:='пользователь';
stringgrid1.Cells[1,0]:='действие';
stringgrid1.Cells[2,0]:='время';
GroupBox1.Visible:=true;
GroupBox2.Visible:=false;
d:=true;
i1:=1;
// Memo2.Lines.Insert(0,'Server starting');
ServerSocket1.Open;
w := GetLogicalDrives;
Root := '#:\';
for i := 0 to 25 do
begin
Root[1] := Char(Ord('A') + i);
if (W and (1 shl i)) > 0 then
if (GetDriveType(Pchar(Root)) = DRIVE_FIXED) or
(GetDriveType(Pchar(Root)) = DRIVE_removable)
then
begin
combobox1.Items.Add(Root);
nom1:=nom1+1;
end;
end;
combobox1.ItemIndex :=0;
s:=combobox1.Items[0];
pytb:=s;
SpisF(pytb);
mas:=0;
a[mas]:=pytb;
ist:=false;
end;
procedure TForm1.ComboBox1Click(Sender: TObject);
begin
s:=ComboBox1.Items[ComboBox1.ItemIndex];
pytb:=s;
SpisF(pytb);
nom:=Combobox1.ItemIndex;
mas:=0;
a[mas]:=pytb;
end;
procedure TForm1.ListBox1DblClick(Sender: TObject);
begin
if listBox1.Items[listBox1.ItemIndex]='..' then
begin
mas:=mas-1;
pytb:=a[mas];
end
else
begin
if (ExtractFileExt(pytb+listBox1.Items[listBox1.ItemIndex])='') then
begin
mas:=mas+1;
pytb:=pytb+listBox1.Items[listBox1.ItemIndex]+'\';
a[mas]:=pytb;
end
else
exit;
end;
if ist=false then
begin
combobox1.Items.add(pytb);
combobox1.ItemIndex:=nom1;
ist:=true;
end
else
begin
combobox1.Items[nom1]:=a[mas];
combobox1.ItemIndex:=nom1;
end;
SpisF(pytb);
for i:=0 to listbox1.items.Count-1 do
begin
b[i]:=listbox1.items[i];
end;
end;
procedure TForm1.ListBox1KeyPress(Sender: TObject; var Key: Char);
begin
//if (key=#13) then
end;
procedure TForm1.ServerSocket1Listen(Sender: TObject;
Socket: TCustomWinSocket);
begin
//Memo2.Lines.Insert(0,'Listening on port '+IntToStr(ServerSocket1.Port));
end;
procedure TForm1.ServerSocket1Accept(Sender: TObject;
Socket: TCustomWinSocket);
begin
{Здесь сервер принимает клиента}
//Memo2.Lines.Insert(0,'Client connection accepted');
end;
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
for i:=1 to 100 do
begin
//ServerSocket1.Socket.Connections[0].sendText(listbox1.Items[i-1]);
if c1[i]='' then break;
ServerSocket1.Socket.Connections[0].sendText(c1[i]);
sleep(1);
end;
{Здесь клиент подсоединяется}
//Memo2.Lines.Insert(0,'Client connected');
end;
procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
{Здесь клиент отсоединяется}
StringGrid1.rowCount:=StringGrid1.rowCount+1;
StringGrid1.cells[0,StringGrid1.rowCount-1]:=polz1;
StringGrid1.cells[1,StringGrid1.rowCount-1]:='отключился от сервера';
StringGrid1.cells[2,StringGrid1.rowCount-1]:=TimeToStr(SysUtils.Time);
// memo1.lines.Add('пользователь '+ s2 + ' отключился от севера в '+TimeToStr(SysUtils.Time));
//Memo2.Lines.Insert(0,'Client disconnected');
end;
procedure TForm1.ServerSocket1ClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
{Произошла ошибка - выводим ее код}
// Memo2.Lines.Insert(0,'Client error. Code = '+IntToStr(ErrorCode));
end;
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
o:integer;
s,s1:string;
begin
i1:=1;
{От клиента получено сообщение - выводим его в Memo1}
s1:='';
s2:='';
s:=Socket.ReceiveText();
if s='zapros' then
begin
// showmessage('ddd');
for i:=1 to 100 do
begin
//ServerSocket1.Socket.Connections[0].sendText(listbox1.Items[i-1]);
if c1[i]='' then break;
ServerSocket1.Socket.Connections[0].sendText(c1[i]);
sleep(1);
end;
end;
for i:=1 to length(s)-3 do
begin
s1:=s1+s[i];
end;
for i:=1 to 100 do
begin
if c1[i]='' then break;
//showmessage(s1);
if s1=c1[i] then
begin
for j:=1 to 100 do
begin
ServerSocket1.Socket.Connections[0].sendText(c1[j]);
if c1[j+1]='' then exit;
end;
end;
end;
s1:='';
for i:=1 to length(s) do
begin
if i<4 then
s1:=s1+s[i]
else s2:=s2+s[i];
end;
if s1='new' then
begin
polz1:=s2;
end;
if s1='sen' then
begin
t:=tfilestream.Create(s2,fmopenread);
if t=nil then showmessage('Ошибка загрузки файла в поток')
else //listbox1.Items.Add('Файл загружен в поток');
t.Seek(0,sofrombeginning);
size:=t.Seek(0,sofromend);
serversocket1.Socket.Connections[0].SendBuf(size,4);
t.Seek(0,sofrombeginning);
if serversocket1.Socket.Connections[0].SendStream(t) then
begin
//showmessage('Файл отправлен');
StringGrid1.rowCount:=StringGrid1.rowCount+1;
StringGrid1.cells[0,StringGrid1.rowCount-1]:=polz1;
StringGrid1.cells[1,StringGrid1.rowCount-1]:='загрузил ' +s2;
StringGrid1.cells[2,StringGrid1.rowCount-1]:=TimeToStr(SysUtils.Time);
end
else //listbox1.Items.Add('Ошибка отправления файла!');
end;
if d=true then
begin
StringGrid1.rowCount:=StringGrid1.rowCount+1;
StringGrid1.cells[0,StringGrid1.rowCount-1]:=polz1;
StringGrid1.cells[1,StringGrid1.rowCount-1]:='подключился к серверу';
StringGrid1.cells[2,StringGrid1.rowCount-1]:=TimeToStr(SysUtils.Time);
d:=false;
if s1='new' then
begin
for j:=0 to 20 do
begin
if buf[1,j]='' then
begin
polz1:=s2;
end;
end;
end;
end
else
begin
s1:='';
for i:=1 to length(s) do
begin
if i<4 then
s1:=s1+s[i]
end;
if (s1<>'sen') or (s1<>'zap') then
begin
StringGrid1.rowCount:=StringGrid1.rowCount+1;
StringGrid1.cells[0,StringGrid1.rowCount-1]:=polz1;
StringGrid1.cells[1,StringGrid1.rowCount-1]:='просмотрел '+ s;
StringGrid1.cells[2,StringGrid1.rowCount-1]:=TimeToStr(SysUtils.Time);
end;
if FindFirst(s +'\'+'*.*', faDirectory, sr ) = 0 then
begin
repeat
if sr.name <> '.' then
begin
c[i1]:=s+'\'+sr.Name;
i1:=i1+1;
end
else
until FindNext(sr) <> 0;
FindClose(sr);
for i:=1 to i1 do
begin
//ServerSocket1.Socket.Connections[0].sendText(listbox1.Items[i-1]);
ServerSocket1.Socket.Connections[0].sendText(c[i]);
c[i]:='';
sleep(5);
end;
// Memo2.Lines.Insert(0,'Message received from client');
// Memo1.Lines.Insert(0,'> '+Socket.ReceiveText);
end;
end;
end;
procedure TForm1.ServerSocket1ClientWrite(Sender: TObject;
Socket: TCustomWinSocket);
var
gg:string;
begin
{Теперь можно слать данные в сокет}
//ServerSocket1.Socket.Connections[0].sendText(inttostr(listbox1.items.Count-1));
//Memo2.Lines.Insert(0,'Now can write to socket');
end;
procedure TForm1.ServerSocket1GetSocket(Sender: TObject; Socket: Integer;
var ClientSocket: TServerClientWinSocket);
begin
//Memo2.Lines.Insert(0,'Get socket');
end;
procedure TForm1.ServerSocket1GetThread(Sender: TObject;
ClientSocket: TServerClientWinSocket;
var SocketThread: TServerClientThread);
begin
//Memo2.Lines.Insert(0,'Get Thread');
end;
procedure TForm1.ServerSocket1ThreadEnd(Sender: TObject;
Thread: TServerClientThread);
begin
//Memo2.Lines.Insert(0,'Thread end');
end;
procedure TForm1.ServerSocket1ThreadStart(Sender: TObject;
Thread: TServerClientThread);
begin
//Memo2.Lines.Insert(0,'Thread start');
end;
procedure TForm1.Button4Click(Sender: TObject);
var j,j1,g:integer;
s,s1:string;
begin
s1:='';
c1[i1]:=pytb+listbox1.items[listbox1.itemindex];
//memo1.Lines.add(c1[i1]);
s:=c1[i1];
for i:=1 to 100 do
begin
j1:=pos('\',s);
if j1<>0 then
begin
j:=j1;
s[j]:='q';
end
else
break
end;
s:=c1[i1];
for i:=j+1 to length(s) do
begin
s1:=s1+s[i];
end;
for i:=0 to listbox2.Count-1 do
begin
if s1=listbox2.Items[i] then exit
end;
listbox2.Items.add(s1);
i1:=i1+1;
end;
procedure TForm1.Button5Click(Sender: TObject);
var t:Tfilestream;
size:integer;
begin
{t:=tfilestream.Create('',fmopenread);
if t=nil then showmessage('Ошибка загрузки файла в поток')
else listbox1.Items.Add('Файл загружен в поток');
t.Seek(0,sofrombeginning);
size:=t.Seek(0,sofromend);
serversocket1.Socket.Connections[0].SendBuf(size,4);
t.Seek(0,sofrombeginning);
if serversocket1.Socket.Connections[0].SendStream(t) then
listbox1.Items.Add('Файл отправлен')
else listbox1.Items.Add('Ошибка отправления файла!')}
end;
procedure TForm1.Button6Click(Sender: TObject);
var g :integer;
begin
g:= listbox2.ItemIndex;
listbox2.Items.delete(listbox2.ItemIndex);
for i:=0 to listbox2.Count-1 do
begin
c[i]:=listbox2.Items[i];
i1:=i1-1;
end;
listbox2.ItemIndex:=g;
end;
procedure TForm1.N2Click(Sender: TObject);
begin
GroupBox1.Visible:=false;
GroupBox2.Visible:=true;
end;
procedure TForm1.N1Click(Sender: TObject);
begin
GroupBox1.Visible:=true;
GroupBox2.Visible:=false;
end;
procedure TForm1.N3Click(Sender: TObject);
begin
form1.Close;
end;
2
Документ
Категория
Без категории
Просмотров
329
Размер файла
370 Кб
Теги
практике, отчет
1/--страниц
Пожаловаться на содержимое документа