ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #3611  
Старый 25.08.2009, 11:47
Аватар для mailbrush
mailbrush
Познавший АНТИЧАТ
Регистрация: 24.06.2008
Сообщений: 1,996
Провел на форуме:
6075534

Репутация: 2731


Отправить сообщение для mailbrush с помощью ICQ
По умолчанию

Спасибо конечно, но проблему решил
Код:
string substr(const string &str, int start, int length)
{
    if (start  < 0 ) start+=str.length();
    if (length < 0 ) length=str.length()+length-start;
    if (length < 0 ) return "";
    return str.substr(start,length);
}
Возникла новая проблема с winsock или _beginthread - точно не знаю. Если вызывать вот это http://forum.antichat.ru/showpost.php?p=373579&postcount=6 один раз, или по очереди (я изменил буффер до 5120 вместо 1023), товсе ок, принимается 5кб, но если же с помощью
Код:
_beginthread(Thread, 0, NULL); //Thread - void Thread (void *a) {http://forum.antichat.ru/showpost.php?p=373579&postcount=6}
то принимается 2кб... В чем может быть проблема? УРЛ/ip подключения есс-но сменил.
 
Ответить с цитированием

  #3612  
Старый 25.08.2009, 12:04
Аватар для Smapt
Smapt
Познающий
Регистрация: 29.01.2008
Сообщений: 82
Провел на форуме:
373690

Репутация: 88
По умолчанию

Тебе именно 5 кб нужно принять? Пропробуй через while принимать пока не получишь 5 кб.

Получишь весь ответ полностью...
PHP код:
char response[1024]; // буффер под ответ

while( recv(my_sock,(char*)response,sizeofresponse),0)!=SOCKET_ERROR && strlen((const char *)response)!=0)
    {
printf("%s\n",response);
ZeroMemory(response,sizeof(response));

Если нужно получать часть ответа и рвать соеденение - можно попробывать считать полученные данные...

PHP код:

#define max_response_len 5120 // 5кб))

char response[1024]; // буффер под ответ
int response_len 0;
while( 
recv(my_sock,(char*)response,sizeofresponse),0) != SOCKET_ERROR && strlen((const char *)response)!=&& response_len max_response_len)
    {
printf("%s\n",response);
response_len+=strlen((const char *)response);

ZeroMemory(response,sizeof(response));

 
Ответить с цитированием

  #3613  
Старый 25.08.2009, 12:18
Аватар для razb
razb
Постоянный
Регистрация: 24.03.2009
Сообщений: 670
Провел на форуме:
2868783

Репутация: 414


Отправить сообщение для razb с помощью ICQ
По умолчанию

Цитата:
озникла новая проблема с winsock или _beginthread - точно не знаю.
Код в студию ...
 
Ответить с цитированием

  #3614  
Старый 25.08.2009, 12:49
Аватар для Gar|k
Gar|k
Постоянный
Регистрация: 20.03.2009
Сообщений: 564
Провел на форуме:
991929

Репутация: 395


По умолчанию

2 Smapt ппц код... && strlen((const char *)response)!=0 вот это ваще лишнее int recv возвращает количество принятых байт его и нужно проверять

вообще чтобы точно в своей программе быть уверенем приняли ли вы все или отправили все нужные данные лучше пользоватся такими функциями вместо recv и send

Код:
//---TCP/IP функции

// отослать ВСЕ ... - правильная функция
int sendall(SOCKET s, char *buf, int len, int flags)
{
    int total = 0;
    int n;

    while(total < len)
    {
        n = send(s, buf+total, len-total, flags);
        if(n == -1) { break; }
        total += n;
    }

    return (n==-1 ? -1 : total);
}

// принять ВСЕ ... - правильная функция
int recvall(SOCKET s, char *buf, int len, int flags)
{
    int total = 0;
    int n;

    while(total < len)
    {
        n = recv(s, buf+total, len-total, flags);
        if(n == -1) { break; }
        total += n;
    }

    return (n==-1 ? -1 : total);
}
 
Ответить с цитированием

  #3615  
Старый 25.08.2009, 12:59
Аватар для Smapt
Smapt
Познающий
Регистрация: 29.01.2008
Сообщений: 82
Провел на форуме:
373690

Репутация: 88
По умолчанию

2Gar|k, ну да, в теории ты прав... а на практике у меня получалось что сервер принимающий без "&& strlen((const char *)response)!=0" зацикливался при некоректном отключении клиента (например при плохом сетевом соеденении)... Понимаю, звучит это как-то бредово но нечего другого кроме strlen не помогло.
 
Ответить с цитированием

  #3616  
Старый 25.08.2009, 13:11
Аватар для mailbrush
mailbrush
Познавший АНТИЧАТ
Регистрация: 24.06.2008
Сообщений: 1,996
Провел на форуме:
6075534

Репутация: 2731


Отправить сообщение для mailbrush с помощью ICQ
По умолчанию

Такс... Проблему решил С циклом все ок работает. Но опять новая проблема =\

PHP код:
void BlaBlaBlavoid *a)
{
int i;
Get("/forum/profile.php?mode=viewprofile&u="+IntToStr(1000+i).c_str(),"tfile.ru"); // тут орет invalid pointer addition.
i++;
}

void Get(char *urlchar *host)
{
BlaBlaBla

Задолбали эти типы данных в c++ =\ Конвертировать только Как это решить?
 
Ответить с цитированием

  #3617  
Старый 25.08.2009, 13:18
Аватар для Smapt
Smapt
Познающий
Регистрация: 29.01.2008
Сообщений: 82
Провел на форуме:
373690

Репутация: 88
По умолчанию

PHP код:
 void BlaBlaBlavoid *a

int i
Get("tfile.ru","/forum/profile.php?mode=viewprofile&u=%d",1000+i);
i++; 
}




void Get(charhostchar Format, ...)
{
    
va_list ap;          // For arguments
    
va_startapFormat );
    
int buff_size _vscprintf(Format,ap)+1;
    
char buff = new char[buff_size];
    
vsprintf(buff,Format,ap);

//В переменной buff будет строчка "/forum/profile.php?mode=viewprofile&u=1000" (или не 1000 зависит от того что передашь)

    
va_end  ap );
delete[] buff;


Последний раз редактировалось Smapt; 25.08.2009 в 13:25..
 
Ответить с цитированием

  #3618  
Старый 25.08.2009, 13:37
Аватар для mailbrush
mailbrush
Познавший АНТИЧАТ
Регистрация: 24.06.2008
Сообщений: 1,996
Провел на форуме:
6075534

Репутация: 2731


Отправить сообщение для mailbrush с помощью ICQ
По умолчанию

Код:
void Get(char* host, char * Format, ...)
1. Вместо троеточия что?
2. Теперь ошибка, что ф-ции нету _vscprintf.
 
Ответить с цитированием

  #3619  
Старый 25.08.2009, 13:44
Аватар для Smapt
Smapt
Познающий
Регистрация: 29.01.2008
Сообщений: 82
Провел на форуме:
373690

Репутация: 88
По умолчанию

<stdio.h> подключена? Нужно именно проеточие... Функция будет работать по принципу функции printf, в переменную format передаётся "маска" напимер "name %s age %d\n" а в "троеточие" передаётся набор параметров:
PHP код:
char name "nikolay";
int age 18;
printf("name %s   age %d\n",name,age);
//выведит строку "name nikolay  age 18" 
точно так же будет работать и твой Get.
 
Ответить с цитированием

  #3620  
Старый 25.08.2009, 14:01
Аватар для mailbrush
mailbrush
Познавший АНТИЧАТ
Регистрация: 24.06.2008
Сообщений: 1,996
Провел на форуме:
6075534

Репутация: 2731


Отправить сообщение для mailbrush с помощью ICQ
По умолчанию

Подключена.
ЗЫ: Работаю в Borland C++ Builder 6
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Часто задаваемые вопросы по MySQL Серый PHP, PERL, MySQL, JavaScript 5 28.12.2006 18:26
Интернетчики задали российскому президенту очень странные вопросы podkashey Мировые новости 4 07.07.2006 16:53
Вопросы по Ipb 2.0 Voodoo_People Форумы 26 15.02.2005 22:57



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ