Поиск:

Ответ в темуСоздание новой темы Создание опроса
> API Socket и send, recv, Отсылка пакетов и приём 
:(
    Опции темы
XPyCT
Дата 3.2.2011, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Всем привет!

на стороне сервера 

есть структура для формирования определенного пакета
Код

struct CKickPacket{
        short size;
        char type;
};


ею формируется пакет на какое либо действие и отсылается клиенту
вот так
Код

//---------------------------------------------------------------------------
void __fastcall TForm1::KickButtonClick(TObject *Sender)
{
CKickPacket *KickPacket=new CKickPacket;
if(ListBox1->Items->Count > 0 && ListBox1->ItemIndex > -1)
 {
   int CL_Index=ListBox1->ItemIndex;
        //---------
        KickPacket->size=2;
        KickPacket->type=3;

        
         send(Network->CL_List[CL_Index]->ClientGuard,(char*)KickPacket,sizeof(KickPacket),0);
        
        //closesocket(Network->CL_List[CL_Index]->ClientGuard);
        ListBox1->Items->Delete(CL_Index);
        Network->CL_List.erase(&Network->CL_List[CL_Index]);
 }
}
//---------------------------------------------------------------------------


Вопрос в следующем как принять и распознать этот пакет уже на стороне клиента
с отсылкой просто текста проблем нет, но хочется как то по людски!

Что то никак не вкурю!
за ранее спс 
PM MAIL Skype   Вверх
Artemon
Дата 3.2.2011, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


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

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



1. Сначала передай количество пакетов, которое будете послано.
2. На стороне клиента получай свои пакеты

for(;k < КОЛ_ВО_ПАКЕТОВ ;)
recv();


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

Это сообщение отредактировал(а) Artemon - 3.2.2011, 13:02


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
XPyCT
Дата 3.2.2011, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Тупо не могу понять!
В данном случае я пытаюсь сказать клиенту что его кикнули!

Как я могу послать количество пакетов? если  они будут формироватся исходя от того что выполнит  и вернет клиент
PM MAIL Skype   Вверх
Artemon
Дата 3.2.2011, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


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

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



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

Код

const int DataMaxSize = 256;

enum EActions
{
 eqKickClient = 0,
 eqFuckClient
};

struct SData
{
  BYTE Action;
  char Data[DataMaxSize];
};

// Сервер
void Server()
{
  SData data;
  data.Action = (BYTE)eqKickClient;
  strcpy(data.Data, "kick");
  send(Socket, (char*)&data, sizeof(SData));
}

// Клиент
void Client()
{
  SData data;
  
  while(1==1)
          {
          recv(Socket, (char*)&data, sizeof(SData));
          
          switch(data.Action)
                    {
                    case eqKickClient:
                                               break;
                    case eqFuckClient:
                                               break;
                    }
          }   
}


Добавлено через 5 минут и 4 секунды
Есть один интересный прием - как можно послать структуру с данными переменной длины, если не найдете сами - покажу.


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
XPyCT
Дата 4.2.2011, 00:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



как попробую отпишу!
+ стоит
PM MAIL Skype   Вверх
XPyCT
Дата 5.2.2011, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Спс все работает! Ну а про другой способ? =)
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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