Re: Как переслать структуру с помощью сокетов
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 06.04.05 08:43
Оценка:
Здравствуйте, LeXa-XL, Вы писали:

LX>имеется структура :

LX>которую надо отослать серверу, а сервер, соответственно, должен ее получить, изменить полученные данные и отправить их обратно.

#pragma pack(push,1)

struct {
  unsigned long id;
  unsigned long size;
  unsigned long type;
    char name[32];
    char addr[16];
  unsigned long p;
} data;

#pragma pack(pop)


// гарантированная отправка всего буфера
int sendall( SOCKET sock, const char * buff, int nBytes )
{
   int nLeft = nBytes;
   int idx = 0;
   while (nLeft > 0)
   {
      int ret = send( sock, &buff[idx], nLeft, 0);
      if (ret == SOCKET_ERROR)
      {
         return SOCKET_ERROR;
      }
      nLeft -= ret;
      idx += ret;
   }

   return nBytes;
}


// обнулили
ZeroMemory( &data, sizeof(data ) );

// заполнили data
// ...

// установили связь

// отправили 
if( SOCKET_ERROR == sendall( _socket, ( const char* )&data, sizeof( data ) ) )
{
// Облом
}


если данные могут пересылаться разные, а не только data, то придется к эту структуру предварять заголовком — тип данных, размер пакета.

Ну и прием соответственно — recv в буфер, потом смотришь, что принял не меньше sizeof(data), если если меньше, снова на recv, когда придет все — memcpy в data на этой стороне.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.