使用StreamSocket输入流配置AsyncCallback方法

时间:2016-09-13 20:53:37

标签: uwp tcpclient

我正在修改一些基于TCPClient的代码,以使其与UWP一起使用。我试图用基于StreamSocket的TCPClient基础设施替换TCPClient基础设施。我遇到的问题是替代:

            client.GetStream().BeginRead(readBuffer, 0, READ_BUFFER_SIZE, new AsyncCallback(FetchFrame), null);

我无法找到StreamSocket的等效方法,它允许我设置一个异步回调函数(在本例中为FetchFrame)来读取输入流。有什么想法吗?

1 个答案:

答案 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加载输入流。