Интернет-магазин

Просмотр корзины
В корзине:

товаров - 0 шт.



§ 34. Разработка программы для чтения данных с сервера

Дмитрий Иванов, Январь 2007
Статья впервые опубликованна 14 Мая 2012

Файлы к статье скачать


Вот дело дошло и до самой программы, которая считывает данные с сервера. Сразу скажу, что готовый проект находится в файлах к этой статье. Давайте подробнее рассмотрим как она (программа) работает.


Как видно это обычное диалоговое приложение на MFC (среда разработки Microsoft Visual C++ 6.0). Общий принцип его работы следующий: с определенным периодом программа устанавливает связь с файлом, в который мы записываем данные на сервере, и считывает данные из него. Далее полученное число просто отображается в окне программы. Я думаю, Вам не составит большого труда модернизировать программу и например, полученное число записывать в регистр DATA LPT порта с помощью библиотеки inpout32.dll. На окне диалога размещены два Edit-окна. Первое (то что вверху) используется для ввода адреса файла, из которого нужно считать данные. Во второе помещается результат чтения данных.

Рассмотрим сначала, описание класса диалога CWinNetDlg (приложение называется WinNet). Сюда мы должны добавить две переменные, а именно переменную экземпляра класса CInternetSession - специального класса MFC, предназначенного для работы с Internet и указатель на переменную класса CStdioFile, предназначеннго для работы с файлами.

class CWinNetDlg : public CDialog
{
// Construction
public:
	CWinNetDlg(CWnd* pParent = NULL);	// standard constructor
	CInternetSession m_ses;
	CStdioFile* f;
        .............

Когда происходит нажатие на кнопку Start запускается программыный таймер с периодом срабатывания 3 сек. Т.е. считывание данных с сервера будет происходить раз в 3 сек.

void CWinNetDlg::OnButton1() 
{
	// TODO: Add your control notification handler code here
	SetTimer(1,3000, NULL);	
}

Теперь, когда управление переходит на обработчик сообщений таймера, мы проводим считывание данных с сервера. Для этого с помощью метода класса CInternetSession OpenURL устанавливаем связь с файлом, адрес которого указан в переменной m_adr. Перемнная m_adr связана с первым окном ввода, куда вводится адрес файла перед запуском таймера. Далее с помощью функции ReadString() проводим считывание данных из файла и помещение их во второе Edit-окно.

void CWinNetDlg::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	
	UpdateData(true);	

	m_text="";
	m_adr=m_adr;
	UpdateData(false);
	
	f=this->m_ses.OpenURL(m_adr, 1, 
	INTERNET_FLAG_TRANSFER_ASCII|INTERNET_FLAG_RELOAD, NULL, NULL);	
	CString s;		
	if(f!=NULL)
	{
		f->SeekToBegin();
		while(f->ReadString(s))
		{
			m_text+=s;
			UpdateData(false);
		}
	}
		
	f->Close();
		
	CDialog::OnTimer(nIDEvent);
}

Если нажать на кнопку Stop то мы просто останавливаем таймер и считывание данных с сервера прекращается.

void CWinNetDlg::OnStop() {
	
	KillTimer(1);	
}

Итак, давайте протестируем комплекс целиком. Запустите локальный сервер. Скомпилируйте приложние и в первое окно ввода введите адрес http://www.mysite.ru/DataBase.txt (см. прошлую стаью). Введите на web-странице в форму ввода число и сохраните его. Если все в порядке, то с задержкой 1-2 сек. оно (число) появится во вотором окне ввода нашего приложения!



© Дмитрий Иванов
Январь 2007
http://www.kernelchip.ru



© KERNELCHIP 2006 - 2023