我正在修改一些基于TCPClient的代码,以使其与UWP一起使用。我试图用基于StreamSocket的TCPClient基础设施替换TCPClient基础设施。我遇到的问题是替代:
client.GetStream().BeginRead(readBuffer, 0, READ_BUFFER_SIZE, new AsyncCallback(FetchFrame), null);
我无法找到StreamSocket的等效方法,它允许我设置一个异步回调函数(在本例中为FetchFrame)来读取输入流。有什么想法吗?
答案 0 :(得分:0)
我无法找到StreamSocket的等效方法,它允许我设置一个异步回调函数(在本例中为FetchFrame)来读取输入流。
据我所知,没有办法为StreamSocket输入流设置异步回调函数。 TCPClient.GetStream会返回一个NetworkStream对象,该对象在UWP中不存在。
但是,因为BeginRead
完成后执行了回调。我们可以用UWP方式做到这一点。您可以通过以下代码首先获取输入流:
Stream streamIn = socket.InputStream.AsStreamForRead();//socket is a StreamSocket instance
StreamReader reader = new StreamReader(streamIn);
string response = await reader.ReadLineAsync();
在此之后,您可以根据您获得的结果致电FetchFrame
。
FetchFrame(response).
有关使用StreamSocket的详细信息,请参阅Sockets in UWP。
还有一个更为官方的样本参考:StreamSocket。
注意:与文档不同,官方示例使用DataReader加载输入流。