Здравствуйте, 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 на этой стороне.