Итак, я отправляю необработанные данные через сокет.Символ становится int при отправке через сокет
unsigned char data [] = {0xFA, 0xDE, 0xDB, 0xAD, 0x00, 0x00, 0x00, 0x06, 0x54, 0x65, 0x61, 0x67,0x61, 0x6E, 0x19, 0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x68, 0x6F, 0x77, 0x20, 0x61, 0x72, 0x65, 0x20, 0x79, 0x6F, 0x75, 0x20, 0x66, 0x62, 0x67, 0x67, 0x6F, 0x74, 0x3F };
заканчивается тем же самым.
, но при его получили это заканчивается, как этот
fffffffa ffffffde ffffffdb ffffffad 0 0 0 6 54 65 61 67 61 6e 19 48 65 6c 6c 6f 20 68 6f 77 20 61 72 65 20 79 6f 75 20 66 62 67 67 6f 74 3f 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Обратите внимание, как первые 4 байта в исходном изменения в 16 байт.
Любая идея, что вызывает это?
Маленький код
char data[512];
if (socket.Receive(address, data, sizeof(data))){
char *point = data;
if ((unsigned int) *point == 0xFADEDBAD)
fprintf(stderr, " WIN \n");
/////////////////////// Приемный ФУНКЦИЯ СВЫШЕ //////// ///////////
int Receive(Address & sender, void * data, int size)
{
assert(data);
assert(size > 0);
if (socket == 0)
return false;
#if PLATFORM == PLATFORM_WINDOWS
typedef int socklen_t;
#endif
sockaddr_in from;
socklen_t fromLength = sizeof(from);
int received_bytes = recvfrom(socket, (char*)data, size, 0, (sockaddr*)&from, &fromLength);
if (received_bytes <= 0)
return 0;
unsigned int address = ntohl(from.sin_addr.s_addr);
unsigned int port = ntohs(from.sin_port);
sender = Address(address, port);
return received_bytes;
}
private:
int socket;
};
}
//////// КАК данные передаются ///////////// /////
unsigned char data [] = {0xFA, 0xDE, 0xDB, 0xAD, 0x00, 0x00, 0x00, 0x06, 0x54, 0x65, 0x61, 0x67,0x61, 0x6E, 0x19, 0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x68, 0x6F, 0x77, 0x20, 0x61, 0x72, 0x65, 0x20, 0x79, 0x6F, 0x75, 0x20, 0x66, 0x61, 0x67, 0x67, 0x6F, 0x74, 0x3F };
socket.Send (address, (char*)data, sizeof (data) );
//////////////// МЕТОД ////////////////
bool Send(const Address & destination, const void * data, int size)
{
assert(data);
assert(size > 0);
if (socket == 0)
return false;
sockaddr_in address;
address.sin_family = AF_INET;
address.sin_addr.s_addr = htonl(destination.GetAddress());
address.sin_port = htons((unsigned short) destination.GetPort());
int sent_bytes = sendto(socket, (const char*)data, size, 0, (sockaddr*)&address, sizeof(sockaddr_in));
return sent_bytes == size;
}
как вы пишете байты? можете ли вы опубликовать фрагмент кода? – alexgirao
Просто догадка: пятый символ имеет значение null. может закончиться ваш массив ... – MeNa