Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Виснет ClientSocket 
V
    Опции темы
Ak47black
Дата 10.7.2007, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: нет
Всего: 0



bronenos, ты работать с компонентами на программном уровне толком неумеешь.
Код

  TClientSocket *CSocket;
  CSocket->Open();
 
Почитай про объектное программирование и как правильно создавать и потом возвращайся.
Ты этот сокет даже не создал и ни присвоил адрес ни порт куда коннектиться. 
А вообще тут можно обойтись и без создания нового только ты чтото неправильно там делаешь, исходя из того как ты кодишь думаю так и есть smile .

Это сообщение отредактировал(а) Ak47black - 10.7.2007, 14:45
PM MAIL   Вверх
bronenos
Дата 10.7.2007, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 4.7.2007

Репутация: нет
Всего: нет



Я про ООП знаю. В PHP опыт имею, а про эти опции - ступил конкретно конечно, да не в этом наверное дело...
У Вас есть ICQ, можно туда стукнуть?
PM MAIL   Вверх
Ak47black
Дата 10.7.2007, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: нет
Всего: 0



bronenos, ты можешь описать что ты вообще пытаешься сделать (для чего тебе сокеты нужны)? 

Это сообщение отредактировал(а) Ak47black - 10.7.2007, 17:08
PM MAIL   Вверх
bronenos
Дата 10.7.2007, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 4.7.2007

Репутация: нет
Всего: нет



почему все время bronenos является первым словом? =)
я делаю дополнение к своему веб-чату, и сокетами запрашиваю данные (+ руку набить), и все было бы путем, если бы после асинхронной ошибки сокет не переставал функционировать....
PM MAIL   Вверх
Ak47black
Дата 10.7.2007, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: нет
Всего: 0



Короч я в Borlande Builder неособо разбираюсь, возьми переведи эту функцию на си
Код

function DownloadFile(const Url: string): string;

var

NetHandle: HINTERNET;

UrlHandle: HINTERNET;

Buffer: array[0..1024] of char;

BytesRead: cardinal;

begin

Result := '';

NetHandle := InternetOpen('Delphi 5.x', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);

 

if Assigned(NetHandle) then

   begin

 

     UrlHandle := InternetOpenUrl(NetHandle, PChar(Url), nil, 0, INTERNET_FLAG_RELOAD, 0);

 

     if Assigned(UrlHandle) then

{ UrlHandle правильный? Начинаем загрузку }

       begin

         FillChar(Buffer, SizeOf(Buffer), 0);

         repeat

           Result := Result + Buffer;

           FillChar(Buffer, SizeOf(Buffer), 0);

           InternetReadFile(UrlHandle, @Buffer, SizeOf(Buffer), BytesRead);

         until BytesRead = 0;

         InternetCloseHandle(UrlHandle);

       end

     else

       begin

{ UrlHandle неправильный. Генерируем исключительную ситуацию. }

         raise Exception.CreateFmt('Cannot open URL %s', [Url]);

       end;

 

     InternetCloseHandle(NetHandle);

   end

else

{ NetHandle недопустимый. Генерируем исключительную ситуацию }

   raise Exception.Create('Unable to initialize Wininet');

end;



Тут есть чтото похожее и будет тебе счастье.
Эта функция запрашивает по адресу и возвращает html думаю это точто тебе нужно.
Перевести тут нетрудно. 

Это сообщение отредактировал(а) Ak47black - 10.7.2007, 19:38
PM MAIL   Вверх
bronenos
Дата 10.7.2007, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 4.7.2007

Репутация: нет
Всего: нет



я понял это так: "Нафиг тебе ClientSocket? Воспользуйся чем-нибудь другим."
PM MAIL   Вверх
Ak47black
Дата 10.7.2007, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: нет
Всего: 0



bronenos,  да потомучто если ты этим путем пойдешь то тебе нужно изучить протокол передачи http и не одну команду надо передать(хотя незнаю может както и одной умудришься обойтись), а с этим нет.
Такчто переводи. Я им пользовался работает нормально.

Это сообщение отредактировал(а) Ak47black - 10.7.2007, 20:32
PM MAIL   Вверх
bronenos
Дата 10.7.2007, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 4.7.2007

Репутация: нет
Всего: нет



простите мою лень... нашел способ... проверять CClient->Socket->SocketHandle на условие больше нуля....

Добавлено @ 20:32
Код

    CSocket->Socket->SendText(
      "GET /c_chat/chat.php HTTP/1.0" "\r\n"
      "Host: phx.freedomf.net"        "\r\n"
      "\r\n"
    );


вот что я передаю

Это сообщение отредактировал(а) bronenos - 10.7.2007, 20:33
PM MAIL   Вверх
bronenos
Дата 10.7.2007, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 4.7.2007

Репутация: нет
Всего: нет



радуюсь видимо рано...
все равно останавливается даже с новым сокетом

Код

if (CSocket->Socket->SocketHandle > 0)
{
  CSocket->Socket->SendText((AnsiString)
    "GET /" + Info->Path + "chat.php HTTP/1.0" "\r\n"
    "Host: " + Info->Host +                    "\r\n"
    "\r\n"
  );
}
else
{
  CSocket = new TClientSocket(NULL);
  Info->Init(CSocket);
  CSocket->Open();
}


Код

struct sInfo
{
  AnsiString Host;
  AnsiString Path;
  int Port;

  sInfo()
  {
    Host = "phx.freedomf.net";
    Path = "c_chat/";
    Port = 80;
  }

  void Init(TClientSocket *Socket)
  {
    Socket->Host = Host;
    Socket->Port = Port;
  }
};

sInfo *Info = new sInfo;


Это сообщение отредактировал(а) bronenos - 10.7.2007, 21:39
PM MAIL   Вверх
bronenos
  Дата 11.7.2007, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 4.7.2007

Репутация: нет
Всего: нет



надо же.. удалось окончательно рещить проблему, присвоив таки без ошибок новый объект класса переменной
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0506 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.