Page 1 of 1

Отображение картинки от веб-серв

Posted: Fri Jun 27, 2008 1:48 pm
by Alt
Доброе время суток.
Есть CGI-приложение отдающее картинку.
Подскажите пожалуйста способ или виджет для отображения такой картинки в приложении wxWidgets. wxHTML не подошел.
Спасибо.

Posted: Fri Jun 27, 2008 5:43 pm
by T-Rex
wxHTTP/wxURL

Posted: Mon Jun 30, 2008 9:35 pm
by Alt
Доброе время суток.
Для чтения картинки в 1.3 КБ пытаюсь использовать такой код.
Приложение собирается, стартует, минуты 3 оттягивает на себя все процессорное время,ест память до 20М. Дебаггер сообщает, что gifdecod.cpp(427): assert "ab_free < allocSize" failed.
VС++ 2005 EE при этом может захотеть перезапуститься.

Code: Select all

wxHTTP http;

wxString updateurl="127.0.0.1";

http.SetHeader("Accept","text/*");
http.SetHeader("User-Agent","ADSC");
http.SetTimeout(120);


if (http.Connect(updateurl,8868))
   {
    wxInputStream *stream=http.GetInputStream("/alr/images/java_on.gif");

    wxProtocolError err=http.GetError();
    if (err==wxPROTO_NOERR)
       {
	wxImage image;
	wxBitmap *mbmp;
	if (!image.LoadFile(*stream,wxBITMAP_TYPE_GIF,-1))
	   wxLogError(wxT("Can't load GIFFFF image from stream"));
	else
           mbmp = new wxBitmap( image );
	image.Destroy();
	delete stream;
        }
    } 

http.Destroy();
Что можно предпринять ?
Благодарю.

Posted: Tue Jul 01, 2008 2:41 pm
by T-Rex

Code: Select all

bool wxTestApp::OnInit()
{   
	do
	{
		wxSocketBase::Initialize();
		wxURL url(wxURI(wxT("http://forums.realcoding.net/uploads//av-7075.png")));
		wxInputStream * stream = url.GetInputStream();
		if(!stream) break;
		wxMemoryBuffer buffer;
		char byte(0);
		while(!stream->Eof())
		{
			stream->Read(&byte, sizeof(byte));
			buffer.AppendByte(byte);
		}
		if(!buffer.GetDataLen()) break;
		wxFileOutputStream fileStream(wxT("test.png"));
		if(!fileStream.IsOk()) break;
		wxMemoryInputStream memStream(buffer.GetData(), buffer.GetDataLen());
		fileStream.Write(memStream);
		fileStream.Close();
		wxMessageBox(_("Yo!"));
		
	}
	while(false);
	// Прочая лобуда
}
?

Posted: Tue Jul 01, 2008 9:04 pm
by Alt
процессор загружается полностью.Дальше этой строки не проходит

Code: Select all

wxInputStream * stream = url.GetInputStream();







(WinXPSP2/MSVC++2005EE/wxWidgets 2.8.3)

Posted: Wed Jul 02, 2008 2:31 pm
by T-Rex
Хм.. странно, у меня воркает чудесно.

А приложение консольное или гуевое?

Какая ОСь, версия библы?
Что с firewall'ами? Как себя ведет если их отключить? Что с антивирусами? Как себя ведет если их отключить? Как себя ведет броузер при попытке открыть URL c нужной пикчей?

Posted: Wed Jul 02, 2008 4:08 pm
by Alt
Фильтрация не блокирует,антивирус не мешает,браузер аватару показывает.
Приложение с wxAUI,код со стримом содержится в методе главного фрейма.
WinXPSP2/MSVC++2005EE/wxWidgets 2.8.3


Попробую обновить библиотеку до 2.8.8.
У Смарта по стримам почти ничего.

Не пойму для чего эта строка

Code: Select all

wxSocketBase::Initialize();
Судя по форумам - распространенная проблема.

Отдельное большое спасибо за wxwidgets.info .

Posted: Wed Jul 02, 2008 4:59 pm
by T-Rex

Code: Select all

wxSocketBase::Initialize();
Ну эээ.. Вот потому что распространенная ошибка, она и нужна. В принципе можно код глянуть, думаю там прсото WSAStartup() вызывается. Без этого в винде с сокетами будут траблы.

По остальному, да, попробуй новую версию, если будут проблемы, будем думать дальше. CGI вызывается с локалхоста? Что в качестве Web-сервера? Apache/IIS? Если установлены оба, они точно не конфликтуют у тебя? Попробуй на какой-нить другой порт повесить, на любой выше 1024 например и посмотреть на результаты. Что происходит если запустить веб-сервер и CGI на виртуальной машине (чистая винда + твой веб-сервер) + бридж на сетевой интерфейс. Что происходит если в системе установить виртуальный loopback сетевой адаптер (есть в стандартном списке сетевых адаптеров)?

ЗЫ: поставь сниффер, собери проект в Debug и Release и посмотри не конектится ли приложение на адрес 0.0.0.0. У меня как-то в билдере были с этим траблы. Как себя ведет приложение с Multi Threaded [Debug] DLL сборкой?

Posted: Thu Jul 03, 2008 2:46 pm
by Alt
Обновился на другой машине до 2.8.8.
Добавил

Code: Select all

url.SetProxy(_T("myproxyip:myproxyport"));
И заработало!!!
Спасибо.

Win2000Server/vc2005ee/wxWidgets 2.8.8