Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » FAQ по Borland C++ Builder

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42

Открыть новую тему     Написать ответ в эту тему

OdesitVadim



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ShIvADeSt
В The Bat там действительно компонент, а вот если в системном виндовсовском приложении, то это совсем другое дело.

Цитата:
 Вот только какой код не помню, там вроде надо шрифт какой то выбирать.

Можно просто в качестве пасссимвола кода вписать #149. А если ещё курьер шрифт применить полужирный, то вообще лепота

----------
Press any key to continue or any other key to exit
Пишите так, чтобы не было стыдно за нобелевскую премию.

Всего записей: 1568 | Зарегистр. 19-09-2003 | Отправлено: 12:13 19-05-2006 | Исправлено: OdesitVadim, 12:18 19-05-2006
kot3

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
royt
 

Цитата:
В общем будем рыть, но похоже проще будет перейти на BDS2006, кажись там теперь есть штатные средства для обсуждаемой задачи.

 
А можно про эти средства в BDS поподробнее???
Мне тоже интересно получить стек вызовов.

Всего записей: 430 | Зарегистр. 15-12-2005 | Отправлено: 10:04 23-05-2006
Razgildai



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Пытаюсь получить веб страницу через TClientSocket, но что-то не работает?
Смотрю снифером, соед. вроде устанваливается, а вот запрос GET....не проходит, ума не приложу что за дела, может что не так делаю?
Листинг - Подробнее...

Всего записей: 279 | Зарегистр. 27-04-2005 | Отправлено: 15:01 25-05-2006 | Исправлено: Razgildai, 15:05 25-05-2006
royt

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
А можно про эти средства в BDS поподробнее??? Мне тоже интересно получить стек вызовов.
Подронобстей пока не знаю. Только читал где-то, что в штатной библиотеке есть средства отобразить call stack например при access violation, давно бы так... Наверняка эти функции доступны через API (borland/VCL-евский).

Всего записей: 319 | Зарегистр. 18-08-2004 | Отправлено: 16:49 25-05-2006
kot3

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
royt
 
Пытался найти - ничего не получилось - у BDS2006 help ну просто ужасный....

Всего записей: 430 | Зарегистр. 15-12-2005 | Отправлено: 09:21 26-05-2006
Razgildai



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Все заработало.
Ошибка:

Код:
Socket->SendText("GET http://www.ya.ru/ HTTP/1.1\nAccept: */*\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en)\nHost: www.ya.ru\nConnection: Keep-Alive\n");  
 Memo2->Lines->Add("Request Sended....")
;
перенес в TForm1::WebConnConnect и в запросе "GET ......\n\n, а меня было "GET......\n"
 
Добавлено:
Заработать то-оно заработало. Теперь вопрос, как остановить прием при получении нужной строки, чтобы лишку не грузить. Пробовал фильтровать. Но получается что принимается почти все. Обрезается лишь конец. Судя по всему первый пакет принимается(там и содержиться нужная инфа), но он великоват, а второй(конец страницы) отбрасывается. Как бы ограничить первый пакет, чтобы он был небольшим и содержал нужную инфу, а остальные отбрасывались?
Может в HTTP запросе длину указать или что-нить такое? Подскажите?

Всего записей: 279 | Зарегистр. 27-04-2005 | Отправлено: 11:28 26-05-2006
JohnC



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Теперь вопрос, как остановить прием при получении нужной строки, чтобы лишку не грузить

я делал примерно так, когда баловался флудом.
Сокет в блокирующем режиме.

Код:
 
void __fastcall Thread::ClientSocketConnect(TObject *Sender,TCustomWinSocket *Socket)
{
int totalread = 0, curread = 0;
int tempTimeOUT = TimeOUT;
AnsiString treadtext = "";
 
TWinSocketStream* wnscktstrmMain = new TWinSocketStream(Socket,tempTimeOUT) ;
char* point=new char[tmaxRead];
try {
    if(wnscktstrmMain->Write(tsendtext.c_str(),tsendtext.Length()) >=tsendtext.Length())
        ;//Form1->StatusBar1->Panels->Items[0]->Text ="Request Sent";
    else {
         Form1->LogMemo->Lines->Add(IntToStr(ThrId)+" поток: Error Write");
         }
           do{
                if(wnscktstrmMain->WaitForData(tempTimeOUT)==0)
                        {
                        Form1->LogMemo->Lines->Add(IntToStr(ThrId)+" поток: Данные не получены в теченее "+FloatToStr(tempTimeOUT/1000) +" сек.");
                        break;
                        }
                curread = wnscktstrmMain->Read(point,tmaxRead);
                totalread = totalread + curread;
                treadtext = treadtext + AnsiString(point,curread);
                if(AnsiContainsStr(treadtext, "</html>"))//ТУТ смотрим нужные данные, если есть  
                        break;                //то выходим из цикла и рассоединяемся.
                }
        while ((ClientSocket->Active)&&(curread<tmaxRead)&&(curread!=0));
    }
catch (...)
        {
        Form1->LogMemo->Lines->Add(IntToStr(ThrId)+" поток: Ошибка "+ProxyHost+":"+ProxyPort);
        }
ClientSocket->Socket->Close();
delete wnscktstrmMain;
delete []point;
 

Всего записей: 198 | Зарегистр. 14-07-2004 | Отправлено: 21:28 26-05-2006
Razgildai



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Появился еще один вопрос.
Событие OnConnect происходит при каждом коннекте или нет?
 
Ситуация такая:
По нажатию кнопки делаю ClientSocket1->Open();
По событию OnConnect() посылаю запрос
OnConnect()
{
....
Socket->SendText("GET...");
}
По событию OnRead() пишу данные в мемо.
По событию OnDisconnect я вызываю функцию Func();
 
Func(void)
{
ClientSocket1->Close;
........
//и тут снова отрываю сокет
ClientSocket1->Open();  
}
однако событие OnConnect не происходит хоть ты тресни.
Как бы это правильно реализовать?

Всего записей: 279 | Зарегистр. 27-04-2005 | Отправлено: 17:53 30-05-2006
JohnC



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Razgildai
C сокетом в не блокирующем режиме нормально никак не реализовать,
разве что как нибуть извратом, например через таймер.
Используй блокирующий сокет,  
в нем функция  ClientSocket->Open() возвращает управление после
выполнения события  OnConnect или ошибки.

Всего записей: 198 | Зарегистр. 14-07-2004 | Отправлено: 21:10 30-05-2006
Kott



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Razgildai
А счем связана необходимость ТАКОЙ работы с сокетом? Я имею ввиду отсылку строки в собитии OnConnect()?

Всего записей: 161 | Зарегистр. 12-12-2003 | Отправлено: 05:37 31-05-2006
Razgildai



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Kott
пока особо ни с чем, просто решил заняться самообразованием, вот пытаюсь всякие программы писать на работе от нечего делать.
JohnC
попробую. Судя по всему ты прав. Может скинешь на e-mail примерчик shpiblr[sobaka]yahoo[dot]com

Всего записей: 279 | Зарегистр. 27-04-2005 | Отправлено: 09:05 31-05-2006 | Исправлено: Razgildai, 09:51 31-05-2006
JohnC



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Razgildai

Цитата:
JohnC
попробую. Судя по всему ты прав. Может скинешь на e-mail примерчик

ок. смотри пм

Всего записей: 198 | Зарегистр. 14-07-2004 | Отправлено: 20:48 03-06-2006 | Исправлено: JohnC, 20:50 03-06-2006
Xomyak

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я тут пытаюсь сделать что-то вроде ФТП-клиента. Попался на самом простом. Нужно, чтобы при нажатии на выделенную строку ListBox'а и потом на кнопку Download начиналась загрузка файла. Вот кусок:

Код:
 void __fastcall TFormMain::Button6Click(TObject *Sender)
{
  NMFTP1->Download(ListBox1->Selected->Items);        
}

Обработчик события Button6Click() вызывает такую ошибку:

Код:
[C++ Error] ftpmain.cpp(53): E2288 Pointer to structure required on left side of -> or ->*

Так в чём ошибка, и как её исправить...

Всего записей: 61 | Зарегистр. 01-02-2006 | Отправлено: 01:51 05-06-2006 | Исправлено: Xomyak, 01:57 05-06-2006
EZH



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Xomyak
Items - это коллекция выделеных элементов, а ты выдимио пытаешься использовать её как один элемент.

Всего записей: 1738 | Зарегистр. 02-09-2004 | Отправлено: 10:12 05-06-2006
Razgildai



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
JohnC

Цитата:
ок. смотри пм

спасибо.
Я вот подумал может не использроват этот глюченый TClientSocket а прейти на более низкий уровень, что-то типа

Код:
 
WSAStartup(0x0101, &wsadata);
s = socket(AF_INET, SOCK_STREAM, 0);
memset((char*)&clnt_sin, ' ', sizeof(clnt_sin));
clnt_sin.sin_family = AF_INET;
clnt_sin.sin_addr.s_addr = INADDR_ANY;
clnt_sin.sin_port = 1235;
erb = bind(s, (struct sockaddr*)&clnt_sin, sizeof(clnt_sin));
memset((char*)&srv_sin, ' ', sizeof(srv_sin));
hp = gethostbyname("name");// имя хоста.
srv_sin.sin_family = AF_INET;
srv_sin.sin_port = 1234;
memcpy((char*)&srv_sin.sin_addr, hp->h_addr, hp->h_length);
erc = connect(s, (struct sockaddr*)&srv_sin, sizeof(srv_sin));
er = WSAGetLastError();
 

Всего записей: 279 | Зарегистр. 27-04-2005 | Отправлено: 12:53 05-06-2006
spike



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
как сделать, чтобы форму нельзя было уменьшить менее определенного размера ?

Всего записей: 693 | Зарегистр. 23-10-2003 | Отправлено: 13:01 05-06-2006
EVD



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
spike
У формы есть свойство Constraints

Всего записей: 123 | Зарегистр. 22-12-2005 | Отправлено: 13:12 05-06-2006
JohnC



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Razgildai

Цитата:
Я вот подумал может не использроват этот глюченый TClientSocket а прейти на более низкий уровень

Думаю, использование более низкого уровня даст больше контроля над происходящим процессом, но ценой усложнения кода.
У меня было желание использовать еще более низкий уровень - сырые (raw) сокеты. тогда открываются возможности для замены заголовков пакетов, в том числе и замены ip отправителя.

Всего записей: 198 | Зарегистр. 14-07-2004 | Отправлено: 15:52 05-06-2006
Razgildai



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
интересно...
надо будет посмотреть.
Но сначала надо  побороть свой вариант, а потом уже переходить на raw socket.
Будем сражаться
 

Всего записей: 279 | Зарегистр. 27-04-2005 | Отправлено: 17:18 05-06-2006
royt

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Пытался найти - ничего не получилось - у BDS2006 help ну просто ужасный....
к сожалению сам пока не работаю с ним, если что-то узнаю постараюсь здесь отписаться.
 
ps ...зря наверное тут обсуждение ведем, FAQ все-таки, надо отдельный топик создать. Потом отпишусь в отдельной теме, когда вопрос провентилирую.

Всего записей: 319 | Зарегистр. 18-08-2004 | Отправлено: 09:07 06-06-2006
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » FAQ по Borland C++ Builder


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru