ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
|

23.11.2007, 03:00
|
|
Members of Antichat - Level 5
Регистрация: 05.04.2006
Сообщений: 1,066
Провел на форуме: 3493315
Репутация:
1228
|
|
Сообщение от Dunadan007
Здравствуйте, я первый раз на этом замечательном сайте и меня интересует следующий вопрос:
Если сервер посылает/принимает данные через startinf.hStdInput=startinf.hStdOutput = startinf.hStdError = socket;
То как принимать данные клиентом?
Я пытался через баальшуйщий буффер:
char l_buf [4096];
...
recv(socket, l_buf, 4096);
...
Но передовалась только одна строка.
Тогда я пытался сделать так:
...
char buff_in [128]
...
while (true)
{recv(socket, buff_in,128);
if (buff_in == etalon_void_buffer) break;//etalon buffer -- eto //ZeroMemory(etalon_void_buffer,128);
printf (buff_in);
ZeroMemory(buff_in,128);
}
scanf(%s,buff_out);
send(socket, buff_out, 128);
...
Но так почему-то не выполняется сканф и посылка.
В приведённом коде могут быть орфографические/синтаксические ошибки, не обращайте внимания, в настоящим их точно нет.
Помогите пожалуйста рашить мою проблему.
зацикливание происходит.
делай так:
Код:
char buff_in [128]
int len;
for(;;)
{
len=recv(socket, buff_in,127);
if(len == -1) break;
buff_in[len]='\0';
printf("%s",buff_in );
}
но это сработает ток есле сервер закроет соединение после отправки данных. в противном случае ты должен знать длинну данных которые тебе нужно получить
Последний раз редактировалось nc.STRIEM; 23.11.2007 в 03:09..
|
|
|

27.11.2007, 20:46
|
|
Постоянный
Регистрация: 04.11.2007
Сообщений: 303
Провел на форуме: 811764
Репутация:
119
|
|
Как вывести определенное значение из реестра? Т.е. есть ветка
HKEY_LOCAL_MACHINE\SOFTWARE\someApp\Info\
и ключ Build
Нужно вывести значение этого ключа.
Я использовал RegQueryValueExA, но он не хочет работать
Код:
HKEY hKey;
DWORD Err;
DWORD type = REG_SZ;
char v[80] = " ";
unsigned long buf;
char err;
//.............//
if((RegQueryValueExA(hKey, "Build", NULL, &type, (unsigned char *)v, &buf))==ERROR_SUCCESS)
{
MessageBoxA(0,v,"Good!",0);
}
else
{
MessageBoxA(0, "error", "error", MB_OK);
}
P.S. RegOpenKeyExA работает нормуль...
|
|
|

27.11.2007, 23:32
|
|
Постоянный
Регистрация: 03.02.2007
Сообщений: 520
Провел на форуме: 1777536
Репутация:
932
|
|
Вроде всё должно норм работать... Вместо &type поставь 0.
P.S.
MessageBox`ы это не айс. Ставь breakpoint`ы и запускай по F8. 
Последний раз редактировалось Ky3bMu4; 27.11.2007 в 23:57..
|
|
|

28.11.2007, 05:32
|
|
Banned
Регистрация: 12.01.2007
Сообщений: 113
Провел на форуме: 4094601
Репутация:
495
|
|
Сообщение от nc.STRIEM
зацикливание происходит.
Код:
for(;;)
{
len=recv(socket, buff_in,127);
......
}
......
вау !
while(1) уже не актуально?
Последний раз редактировалось demonoid; 28.11.2007 в 05:35..
|
|
|

28.11.2007, 20:09
|
|
Постоянный
Регистрация: 04.11.2007
Сообщений: 303
Провел на форуме: 811764
Репутация:
119
|
|
Сообщение от Ky3bMu4
Вроде всё должно норм работать... Вместо &type поставь 0.
P.S.
MessageBox`ы это не айс. Ставь breakpoint`ы и запускай по F8. 
Не рабит... Два брейка поставил =)
Даже если убрать месаджбоксы, то действие все рано переносится на else {/*...*/}
Проверил: RegQueryValueExA выдает значение 6
|
|
|

28.11.2007, 20:27
|
|
Постоянный
Регистрация: 08.05.2006
Сообщений: 816
Провел на форуме: 1845671
Репутация:
1338
|
|
criz Бывает компилятор глючит, и не происходит обещенного, я очень часто такое замечаю на Builder C++
// Попробуй переписать в более простой, а не компактный варимант!!!
|
|
|

28.11.2007, 21:15
|
|
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме: 5339610
Репутация:
4360
|
|
Сообщение от demonoid
вау !
while(1) уже не актуально?
нет, не актуально и я даже могу объяснить почему.
компилятор при транслировании цикла while(1) может поставить (скорее всего так и будет) проверку на равенство еденице условия цикла, то есть что 1==1, а это лишние инструкции. Получится код вида mov ecx, 1 / cmp ecx, 1 / jz XXX
А for(;  { .. } всегда транслируется в безусловный jmp
Хотя это, вообщем-то, особенности компилятора, на других компиляторах (а я имел в виду MS VC++) мб и не так
|
|
|

28.11.2007, 22:03
|
|
Участник форума
Регистрация: 13.10.2005
Сообщений: 210
Провел на форуме: 371736
Репутация:
14
|
|
Есть ли такая возможность в C++ Builder 6 ? :
При размещении элемента на форме он растягивается\двигается с определенным шагом, иногда этого шага не достаточно для тонкой работы. Можно ли его уменьшить?
|
|
|

28.11.2007, 22:12
|
|
Leaders of Antichat - Level 4
Регистрация: 11.11.2005
Сообщений: 391
Провел на форуме: 7084941
Репутация:
2277
|
|
вручную растяни до требуемого размера, а более точно через свойства введи конкретное число
|
|
|

28.11.2007, 22:59
|
|
Постоянный
Регистрация: 04.11.2007
Сообщений: 303
Провел на форуме: 811764
Репутация:
119
|
|
Сообщение от GlOFF
// Попробуй переписать в более простой, а не компактный варимант!!!
Да я уж и незнаю как его переписать...
Может причина в отсутствии прав на редактирование реестра? Тогда почему RegOpenKeyExA сработал.... 
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|