nw_connection_send передает данные в Android

Я пытаюсь отправить пакетные данные с macOS на Android, у меня есть пакет, определенный как int (dataType)| int (packet len)|data

Скажем, значение dataType 5 представляет строку, отправленную со стороны macOS:

      auto sendString = [](nw_connection_t connect, dispatch_queue_t q1, int dtType, std::string &data)
{
   int len = (int)data.length()
   int header[2] = {dtType, (int)(len * sizeof(char))}; //dtType=5
   auto dat_head = dispatch_data_create(&header[0], 2 * sizeof(int), q1, ^{});
   auto dat_str = dispatch_data_create(info.c_str(), sizeof(char) * len, q1, ^{});
   auto packet = dispatch_data_create_concat(dat_head, dat_str);
   nw_connection_send(connect, 
                      packet, 
                      NW_CONNECTION_DEFAULT_MESSAGE_CONTEXT, 
                      true, ^(nw_error_t  _Nullable error) 
        {
            if (error != NULL) {
                errno = nw_error_get_error_code(error);
                LOGEX(LOG_ERR, "error code:%d: [%s]", errno, strerror(errno));
            }
            else {
                LOGEX(LOG_INFO, "data sent out");
            }
        });
}

На стороне Android (Java) я использую readInt, чтобы получить тип данных пакета

      int dataType = input.readInt();

что у меня dataType - 16777216, а не 5, я проверил порядок байтов, и это не решит проблему. Как отформатировать данные на стороне macOS, чтобы Android читал правильный int?

1 ответ

Я отказался от отправки необработанных данных, использовал формат NSString для заголовка в строку UTF8, проанализировал строку на стороне Android, и она работает должным образом.

       NSString *dataHead = [NSString stringWithFormat:@"MTData type:%d,len:%d,\n", (int)dt, len];
 NSMutableData *data = [NSMutableData dataWithData:[dataHead dataUsingEncoding:NSUTF8StringEncoding]];
                    
[data appendBytes:info.c_str() length:info.length()];
auto dispatch_content = dispatchDataFromNSData(data);
Другие вопросы по тегам