nw_connection_send 将数据打包到 Android
nw_connection_send packets data to Android
我正在尝试将数据包数据从 macOS 发送到 Android,我将数据包定义为
整数(数据类型)|整数(数据包长度)|数据
假设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();
我得到的数据类型是 16777216,不是 5,我检查了字节顺序,它无法解决问题。
如何在 macOS 端格式化数据以便 Android 读取正确的 int?
我放弃了发送原始数据,使用 NSString 将 header 格式化为 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);
我正在尝试将数据包数据从 macOS 发送到 Android,我将数据包定义为 整数(数据类型)|整数(数据包长度)|数据
假设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();
我得到的数据类型是 16777216,不是 5,我检查了字节顺序,它无法解决问题。 如何在 macOS 端格式化数据以便 Android 读取正确的 int?
我放弃了发送原始数据,使用 NSString 将 header 格式化为 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);