【发布时间】:2018-05-18 08:40:19
【问题描述】:
简单总结:
- boost asio 服务器,发送一个简单压缩的 720x768x3 视频帧
- 数据包大小为 186476,不是很大
无论如何,如果我在 hololens 模拟器或物理设备上测试它,没什么复杂的
// uint32_t data_length == size of frame 'data_ptr'
enum max_length = sizeof(uint32_t);
memcpy(data_, &data_length, max_length);
auto length = boost::asio::write(*socket_, boost::asio::buffer(data_, max_length), e);
length = boost::asio::write(*socket_, boost::asio::buffer(data_ptr, data_length), e);
// receive
char data_[max_length] = { 0 };
fd_set readSet;
FD_ZERO(&readSet);
FD_SET(_socket, &readSet);
timeval timeout;
timeout.tv_sec = 0; // Zero timeout (poll)
timeout.tv_usec = 0;
auto result = select(_socket, &readSet, nullptr, nullptr, &timeout);
if (result == 0)
continue;
result = recv(_socket, data_, max_length, 0);
if (result == SOCKET_ERROR) {
closesocket(_socket);
_socket = INVALID_SOCKET;
break;
}
uint32_t msg_size(0);
memcpy(&msg_size, data_, max_length);
std::vector<char> vec(msg_size);
result = recv(_socket, &vec[0], msg_size, 0);
while (result < msg_size) {
result += recv(_socket, &vec[result], msg_size - result, 0);
}
但是 hololens 无法接收完整的数据包,我也尝试使用 .net 流套接字,结果相同。它尝试了几次,然后在while循环中recv块并且不再接收。
任何人,有什么想法吗?是 uwp 应用程序问题,我无法接收“更大”的数据包,还是因为耗时太长而将其杀死?
【问题讨论】: