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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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

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

Razgildai



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

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

ну и как успехи?

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



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Razgildai
Желание пока так и остается желанием. Тут ведь работы много по изучению и экспериментов, а время, время ... свободного времени сейчас не так много...

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

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

Всего записей: 430 | Зарегистр. 15-12-2005 | Отправлено: 07:53 07-06-2006
Razgildai



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Написал вот такой код. Но что-то не коннектиться.
Все время получаю сообщение "Can't connect"? Пробовал разные хосты, даже в локалке, все равно не пашет. Помогите плиз.

Код:
WSADATA wsaData;
 struct sockaddr_in srv;
 struct hostent* ip_addr;
 int port,s;
 char ip;
 char* http_host="ya.ru";
 if (WSAStartup(WINSOCK_VERSION, &wsaData)) {ShowMessage("Can't Initialize");return 0;}
 ip_addr=gethostbyname(http_host);
 if (!ip_addr) {ShowMessage("Can't Resolve Hostname");return 0;}
 srv.sin_family=AF_INET;
 srv.sin_port=25;
 s=socket(AF_INET,SOCK_STREAM,0);
 if (s==INVALID_SOCKET) {ShowMessage("INVALID_SOCKET");return 0;}
 memcpy((char*)&srv.sin_addr,ip_addr->h_addr_list[0],ip_addr->h_length);
 if (connect(s,(struct sockaddr*)&srv,sizeof(srv))==-1) {ShowMessage("Can't Connect");return WSAGetLastError();}
 

 

Всего записей: 279 | Зарегистр. 27-04-2005 | Отправлено: 11:07 08-06-2006
Razgildai



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

Код:
WSADATA wsaData;
 struct sockaddr_in srv;
 struct hostent* ip_addr;
 int port,s;
 char *InetAddr;
 char* http_host="ya.ru";
 if (WSAStartup(WINSOCK_VERSION, &wsaData)) {ShowMessage("Can't Initialize");return 1;}
 ip_addr=gethostbyname(http_host);
 if (!ip_addr) {ShowMessage("Can't Resolve Hostname");return 2;}
 InetAddr = inet_ntoa (*(struct in_addr *)*ip_addr->h_addr_list);
 memset(&srv, 0, sizeof(srv));
 srv.sin_family=AF_INET;
 s=socket(AF_INET,SOCK_STREAM,0);
 if (s==INVALID_SOCKET) {ShowMessage("INVALID_SOCKET");return 3;}
 //memcpy((char*)&srv.sin_addr,ip_addr->h_addr_list[0],ip_addr->h_length);
 srv.sin_port=htons(80);
 srv.sin_addr.s_addr = inet_addr(InetAddr);
 s=socket(AF_INET,SOCK_STREAM,0);
 if (s==INVALID_SOCKET) {ShowMessage("INVALID_SOCKET");return 4;}
 if (connect(s,(struct sockaddr*)&srv,sizeof(srv))==-1) {ShowMessage("Can't Connect");return 5;}
 Edit1->Text="Connected";
 char *query=(char*)malloc(2048);
 strcpy(query,"GET / HTTP/1.1\r\nHost: ya.ru\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en)\r\nAccept: */*\r\n\r\n");
 if (send(s,query,strlen(query),0)==SOCKET_ERROR) return 6;
.....
 

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

Код:
 
int size=1024; // 1Kb
 char *result=(char*)malloc(size);
 char *res=(char*)malloc(size*1024);
 strcpy(result,"");
 int bytesrec=1;
 while (bytesrec!=0)
 {
  bytesrec=recv(s,result,sizeof(size),0);
  result[bytesrec]=0;
  res+=result;
 }

 
при таком 5-10 сек.

Код:
 
AnsiStrinf res;
int size=1024; // 1Kb
char *result=(char*)malloc(size);
while (true)
 {
  bytesrec=recv(s,result,sizeof(size),0);
  size-=bytesrec;
  result[bytesrec]=0;
  res+=result;
  if (res.Pos("</html>")) break;
 }

Всего записей: 279 | Зарегистр. 27-04-2005 | Отправлено: 14:34 09-06-2006 | Исправлено: Razgildai, 14:36 09-06-2006
spike



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
как работать с XML ?
1 - читать данные
2 - записывать их

Всего записей: 693 | Зарегистр. 23-10-2003 | Отправлено: 10:09 14-06-2006
royt

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

Цитата:
как работать с XML ?
например через Xerces

Всего записей: 319 | Зарегистр. 18-08-2004 | Отправлено: 11:45 14-06-2006
Static

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Разрабатываю одну программу под C++ Builder 5. В ней постоянно используются функции для работы с файлами (конкретно fopen, fseek и некоторые другие). Все замечательно работало, файлы открывало, читало, писало... Потом я переустановил Винды, а с ними и Builder. Теперь при попытке запуска проги (подчеркиваю, перед переустановкой Винды все замечательно работало) выскакивает ошибка EAccessViolation. При компиляции говорит следующее:  
 
Project Videoteka.exe raised exception class EAccessViolation with message "Access violation at address 32566694 in module CC3250MT.DLL". Read of address F861E898. Process stopped. use Step or Run to continue
 
В тексте программы компилятор подчеркивает функции для работы с файлами, конкретно - fseek, якобы ошибка в них. Любое использование этих функций - и все, остановка компиляции.
 
Самое интересное, что если я создаю новый проект и использую в нем эти же самые функции - все работает нормально.  
Еще раз повторю, до переустановки Винды был абсолютно рабочий EXE-шник. Запускаю - не фурычит. Кстати, не фурычит везде: под другой виндой, на других машинах.  
 
Если кто знает что это за проблема и как с ней бороться - сообщите, а то код довольно объемный, чего-то не улыбается все наново переписывать.

Всего записей: 91 | Зарегистр. 30-04-2003 | Отправлено: 18:36 10-07-2006 | Исправлено: Static, 18:37 10-07-2006
vkramnik



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Static
1. А перейти на Билдер-6 нельзя ?  Нужно обязательно на 5-м ?
2. Если нельзя, то попробуйте сделать следующее (мне помогало) :
   а) Из каталога проекта удалить ВСЕ файлы *.obj, *.tds, *.~*, *.cgl
   б) Останутся только *.cpp, *.h(pp), *.dfm, *.ddp, *.bpr, *.dsk, *.res
   в) ПОЛНОСТЬЮ пересобрать проект командой Build Project
А, может, что-то в хидер-файлах порушилось ???
У меня тут намедни тожк аналогичное приключилось - только с СУБД...
Пока нафиг из исходника не убрал (временно!) БД-компоненты, пересобрал проект (с заглушками), потом снова добавил БД-шку - и все опять заработало...  Уф, ну я и испугался...

Всего записей: 1850 | Зарегистр. 14-12-2005 | Отправлено: 22:52 10-07-2006 | Исправлено: vkramnik, 22:58 10-07-2006
Static

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
1. А разве проекты 6-го и 5-го Билдера совместимы? Мне говорили, что нет.
2. Не помогло...
 
Хидер-файлы - это чё?
Я не понимаю, почему EXE-шник не работает, выдавая ту же ошибку. Его-то я вообще не трогал! Последний раз когда я его запускал, он был абсолютно рабочим.

Всего записей: 91 | Зарегистр. 30-04-2003 | Отправлено: 23:28 10-07-2006 | Исправлено: Static, 23:30 10-07-2006
ItsJustMe

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Не в курсе, насколько совместимы сами bpr файлы, но если BCB6 не прочитает файл от BCB5, то это совсем не проблема. Создай в BCB6 пустой проект и накидай туда свои исходники. VCL5 и VCL6 точно совместимы. Проверено.
Выкинь из папки с проектом все, кроме исходников. Пересобери его.
Все VCL libraries линкуй статически. Может глюк в динамическом обращении к ним?
И вот еще что. Ты уверен, что с CC3250MT.DLL ничего не случилось? Может, его вирус какой поел?

Всего записей: 2028 | Зарегистр. 02-09-2005 | Отправлено: 23:09 11-07-2006
Static

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

Цитата:
И вот еще что. Ты уверен, что с CC3250MT.DLL ничего не случилось? Может, его вирус какой поел?

Вряд ли. Не мог он одновременно поесть все на одной машине. Тем более, при создании нового проекта таких ошибок не возникает.

Всего записей: 91 | Зарегистр. 30-04-2003 | Отправлено: 09:40 12-07-2006
monsoon



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
После перехода на BCB6 в формах dfm русские буквы заменяются юникодами.
В BCB5, если нужно было поменять во многих формах одно caption на другое никаких проблем не возникало. Теперь же нужно найти как старое название выглядит в юникоде, как новое будет в юникоде и после этого заменять или визуально перелопачивать все формы, но последним способом легко можно и пропустить нужную замену. Может есть еще другое решение?

Всего записей: 1255 | Зарегистр. 30-01-2003 | Отправлено: 10:53 12-07-2006
Xarde



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
monsoon, решение есть. Причём, очевидное. Нужно всего лишь пользоваться при редактировании bpr-файла редактором, который знает юникод.
 
Кстати, у меня такая проблема тоже бывала. Причём, на шестом билдере. Правда, я патчи на него не ставил. Обычно помогало удаление всего генерящегося мусора и полная пересборка проекта, но был случай, когда и это не помогло. Пришлось весь проект вручную переносить в новый проект. То есть создал проект и давай туда все исходники тащить. Формы пришлось вручную делать, т.к. если я переносил их "автоматом", то проблема оставалась.

Всего записей: 266 | Зарегистр. 06-07-2003 | Отправлено: 07:28 13-07-2006
Static

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
2 Xarde:
Ну, раз ничаво другого не остается... Тогда придется заново тащить исходники в новый проект... Абыдна.

Всего записей: 91 | Зарегистр. 30-04-2003 | Отправлено: 10:49 13-07-2006
monsoon



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Xarde
Какой редактор понимает юникод причем не в чистом виде, а в #1048#1057#1055#1054 и т..п.? Каким редактором можно сделать замену не открывая файлы по одному, а во всех сразу? Для чего редактировать bpr? Там никаких юникодов нет.
Не совсем понимаю как формы сделать вручную. И как сделать, чтобы при компиляции билдер их не затронул?

Всего записей: 1255 | Зарегистр. 30-01-2003 | Отправлено: 11:05 13-07-2006
Kadavr



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
monsoon
Мои поиски ни к чему не привели, так что написал маленькую софтинку - SmallDFMHelper. Она конвертит ANSi2DFMUnicode и обратно. А для массовых замен - Search & Replace рулит
 
P.S. SmallDFMHelper конвертит с учётом того, чтобы потом исп-ть при работе с DFM. Т.е. вставляет лишние ''' и оставляет часть символов as is.

Всего записей: 176 | Зарегистр. 19-03-2004 | Отправлено: 13:46 13-07-2006 | Исправлено: Kadavr, 12:52 14-07-2006
monsoon



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Kadavr
Утилитка хороша, спасибо. Очень даже пригодится.

Цитата:
А для массовых замен - Search & Replace рулит  

Это имеется ввиду для замены  #1048#1057....  на  #1048#1069...... ?
Такую можно почти в любом файловом менеджере осуществить.
Search & Replace имелся ввиду этот ?

Всего записей: 1255 | Зарегистр. 30-01-2003 | Отправлено: 15:33 13-07-2006
Kadavr



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
monsoon
Создал топик для обсуждения этой темы - SmallDFMHelper и пр. утилиты для поиска/замены в DFM-файлах.
 
Да, именно для такой замены Мне больше по душе - этот Search & Replace. Файловые менеджеры не столь удобны (даже FAR с S&R), хотя и позволяют искать в архивах.




обсуждение софтины переноси в Программы, а здесь дай просто ссылку.

Всего записей: 176 | Зарегистр. 19-03-2004 | Отправлено: 17:38 13-07-2006 | Исправлено: Kadavr, 12:51 14-07-2006
DeviL



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Hi народ!
Вот возник тут вопрос. Можно ли в билдере работать не с hlp файлами а chm?
И какими функциями делать на него переход. У меня в проекте справка на hlp, вот думаю может сделать через chm формат - вроде как более продвинутый.
подскажите плиз

Всего записей: 268 | Зарегистр. 24-10-2003 | Отправлено: 15:09 22-08-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