我想在Windows应用商店应用中编写一个服务器应用程序,这样我就可以直接通过我的无线网络将数据从我的计算机传输到我的手机,反之亦然,而无需通过USB线插入(或上传到然后从云端)。为此,我需要在手机端创建一个服务器。我目前的设置是:
StreamSocket^ socket = ref new StreamSocket();
// Assuming that I already have a local server on PC side
HostName^ hostname = ref new HostName("IP_OF_MY_PC");
create_task(socket->ConnectAsync(hostname, "6666", SocketProtectionLevel::PlainSocket))
.then([this]()
{
// 1. WHAT TO DO HERE TO LAUNCH A THREAD?
// 2. HOW TO DO BLOCKING I/O IN THAT THREAD?
});
我知道在then()
的Lambda中,我可以通过socket->InputStream
和socket->OutputStream
与我的电脑交换数据。不幸的是,那些通常在一次性设置中工作。我想启动两个专用后台线程:一个侦听来自我的PC的请求,另一个流回来请求所请求的文件。到目前为止,我的搜索一直是徒劳的。那么有任何相关的参考吗?
作为一个相关问题,似乎Windows Store API没有为阻止I / O 提供任何机制。目前,我正在使用
while (1)
{
create_task(socket->InputStream->ReadAsync(buffer, length,
InputStreamOptions::ReadAhead)).get();
// process the data obtained
}
但这是不可取的,因为我们不仅创造了新的&不必要的任务对象,但似乎每次我想从流中读取数据时都会创建新的线程!如果我已经将所有I / O从UI线程中删除,那么我是不是可以选择阻止I / O呢?或者,是否可以替代StreamSocket
?