Распределенная служба кодирования — страница 3

  • Просмотров 261
  • Скачиваний 5
  • Размер файла 38
    Кб

окончания, не успеха выполнения задачи. С помощью этого можно определить корректность выполнения задач клиентами-кодировщиками. table = mysql_store_result((MYSQL *)rskdb); if(table == NULL) { printf("Error: can't get the result description\n"); send(fdclient, "exit", MAXLINE, 0); break; } if(mysql_num_rows(table) > 0) { row = mysql_fetch_row(table); sendlink = row[1]; sendname = row[3]; Оттданые задачи отмечаем, для того чтобы не раздать на кодирование одни и тежи файлы mysql_query((MYSQL *)rskdb, UPDATE rsk.goal g SET at_work = 1 WHERE link “sendlink”); send(fdclient,

sendname, MAXLINE, 0); send(fdclient, sendlink, MAXLINE, 0); Если задачи кончились – клиенты отсылается флаг успешного окончания работы. send(fdclient, "exit", MAXLINE, 0); Клиент-приложение Забирает из конфигурационного файла пармаетры: соединения с сервером (адрес и порт сервера); соединения с FTP севером (логин пароль). Коннектится к серверу. fdclient = socket (AF_INET, SOCK_STREAM, 0); connect(fdclient, (struct sockaddr *) &servaddr, sizeof(servaddr); Планируется что кодирующий скрипт будет также скачеватся с

ftp сервера, это позволит облегчить вопрос обновления системы – один раз изменив кодирующий скрипт на серверы, все клиенты будут сами обновлятся. Поэтому выполним команду выдачи прав на исполнение нашего кодирующего bash-скрипта. system( “cmod +x SCRIPT “); Получает от сервера задачу кодирования. recv(fdclient, recvflag, MAXLINE, 0); recv(fdclient, recvlink, MAXLINE, 0); Обрабатывает задачу: По полученной ссылке загружает с FTP сервера файл для кодирования curl_easy_setopt(curl,

CURLOPT_URL, recvlink); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &ftpfile); Запускает кодирующий скрипт system("./ SCRIPT recvname newname MYTMP encode_threads "); Загружает закодированный файл на FTP сервер. curl = curl_easy_init(); curl_easy_setopt(curl,CURLOPT_URL, "ftp:// ftp_login:ftp_pass@ftp_link/newname”); Удаляет временные файлы. system("rm recvname"); Это повторяется до тех пор пока не придет флаг что у сервера кончились задачи кодирования. if( strcmp(recvflag, "exit") == 0) { send(fdclient, "exit", MAXLINE, 0); break; } Заключение Написана

бэта-версия клиент-серверного приложения. В ней реализованы: Соединиение клиента и сервера; Работа клиента с тестовой базой данных; Пересылка задач от сервера к клиенту, и ответ клиента о степени выполнения задачи (успешно не успешно, как каком этапе произошла ошибка (загрузка, кодирование, выгрузка)); Скачивание и закачивание с FTP сервера файлов; Имеется тестовый кодирующий скрипт, получающий все необходимые параметры, которые

будут в дальнейшем использованы. Требуется реализовать: Перенести на реальную базу данных задач. Не выполнено так как мне еще не дали к ней доступ. Обеспечить коннект к нестандартному порту FTP сервера. Не выполнено, т.к. Этого не было в тз. Написать кодирующий скрипт. Не выполнено, т.к. Это следующий этап работы. Использованные источники Стивенс У.Р. “Unix Разработка сетевых приложений” 2003г. Руководство по работе с библиотеками libmysql