2014-01-17 3 views
0

Я пытаюсь отправить массив значений пикселов 160x120 uint32_t, которые я генерирую случайным образом. Первые два байта должны иметь значения (160 и 120), а формат данных должен быть int32_t для обоих значений. Как мне каким-то образом нажать эти два значения int32_t в p [0] и p [1] массива uint32_t ?. Второй вопрос: передает ли этот код длину строки в качестве первого байта данных ?. До p [0]?.Длина строки по TCP

int main(int argc , char *argv[]) 
{ 
WSADATA wsa; 
SOCKET server_socket, client_socket; 
struct sockaddr_in server_addr, client_addr; 
int c, iResult; 
char sendbuf [DEFAULT_BUFLEN]; 
uint32_t* p; 
int32_t* z; 
int i; 

// Send uint8_t data to client 

p = (uint32_t*)sendbuf; 

p[0] = 120; // must be an int32_t value 
p[1] = 160; // must be an int32_t value 

srand (time(NULL)); 
for (i = 3; i < 19203; i++) 
{ 
     p[i] = rand() % 4294967295; //range 0-4294967294 */ 
     printf("%d\n", p[i]); 
} 
iResult = send(client_socket, sendbuf, (int32_t)strlen(sendbuf), 0); 
return 0; 

if (iResult == SOCKET_ERROR) 
{ 
    printf("Send failed. Error Code : %d\n", WSAGetLastError()); 
    iResult = 1; 
} 
else 
{ 
    printf("Bytes Sent: %d\n", iResult); 
    iResult = 0; 
} 

// shutdown the connection since no more data will be sent 
if (shutdown(client_socket, SD_SEND) == SOCKET_ERROR) 
{ 
    printf("Shutdown failed. Error Code : %d\n", WSAGetLastError()); 
    iResult = 1; 
} 

closesocket(client_socket); 
WSACleanup(); 

return iResult; 
} 
+0

Нет. Он отправляет то, что находится в буфере, до указанной вами длины. – EJP

ответ

0

1 следует преобразовать содержимое, которое требуется отправить в Big-Endian

2. он не будет, сервер Получать то, что клиент посылает

2

Вместо strlen(sendbuf) в

iResult = send(client_socket, sendbuf, (int32_t)strlen(sendbuf), 0); 

рассчитать размер соответственно

//   number of pixels + int size + 2 ints for p[0] and p[1] 
int size = 160*120*sizeof(uint32_t) + 2 *sizeof(uint32_t); 
iResult = send(client_socket, sendbuf, size, 0); 

Кроме того, убедитесь DEFAULT_BUFLEN равно более чем size. Если вы хотите, вы можете определить DEFAULT_BUFLEN.

Смежные вопросы