如何在UWP中使用StreamSocket时知道套接字连接是否仍然有效?

百分比和

StreamSocket用于连接到套接字服务器,并且使用无限循环读取数据。每条数据均以结尾'\n\n'该代码段如下所示。但是,我不知道套接字是否仍然有效,并且每次服务器关闭连接时都会ReadAsync()引发异常。连接关闭时如何通知?

public async Task<string> ReadData() {
    StreamReader reader = new StreamReader(socket.InputStream.AsStreamForRead());
    char[] ch = new char[65536];
    int i = 0;
    while (IsConnected) {
        await reader.ReadAsync(ch, i++, 1);
        if (i > 1 && ch[i - 1] == '\n' && ch[i - 2] == '\n') break;
    }
    return new StringBuilder().Append(ch, 0, i - 2).ToString();
}
杰瑞·李

每次服务器关闭连接时,ReadAsync()都会引发异常。

发生异常是因为发生不正常的断开连接因此,在关闭服务器端的连接之前,请确保套接字上没有任何挂起的读或写操作,然后应该没有例外。您可以参考StreamSocket类的“备注”部分以获取更多详细信息。

连接关闭时如何通知?

另一端可以检测到正常的套接字关闭为0长度读取。也就是说,它就像常规流一样。是一个类似的线程供您参考。

因此,您可以使用以下代码检查您的方案中是否关闭了连接:

// break when the connection is closed
if (ch[i - 1] == '\0') break;

以下是我已验证的整个方法:

public async Task<string> ReadData()
{
    StreamReader reader = new StreamReader(socket.InputStream.AsStreamForRead());
    char[] ch = new char[65536];
    int i = 0;
    while (true)
    {
        await reader.ReadAsync(ch, i++, 1);
        // break when the connection is closed or data ends with '\n\n'
        if (ch[i - 1] == '\0' || (i > 1 && ch[i - 1] == '\n' && ch[i - 2] == '\n')) break;
    }

    if (ch[i - 1] == '\0')
    {
        // do something here when the connection is closed
    }
    else
    {
        return new StringBuilder().Append(ch, 0, i - 2).ToString();
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Java中使用套接字打印/获取传入的HTTP POST请求的有效负载(带有套接字)

来自分类Dev

如何在Android主屏幕小部件中保持套接字连接有效

来自分类Dev

.netcore套接字断开,而经典.net仍然有效

来自分类Dev

如何在XHTML1.1中使用数据属性并且仍然有效

来自分类Dev

如何在Python中使用管道时关闭套接字连接

来自分类Dev

检查paramiko ssh连接是否仍然有效

来自分类Dev

Laravel-如何检查(SSH)套接字是否有效?

来自分类Dev

Laravel-如何检查(SSH)套接字是否有效?

来自分类Dev

使用Java套接字时可以保证数据有效性吗?

来自分类Dev

当数据行具有不同的有效格式时,如何在C ++中使用sscanf?

来自分类Dev

如何验证使用Google登录的用户是否仍然有效?

来自分类Dev

我如何知道wifi连接有效?

来自分类Dev

如何知道Unicode标识符是否有效?

来自分类Dev

PHP:如何知道链接是否是有效的YouTube链接?

来自分类Dev

如何知道reCAPTCHA v3是否有效?

来自分类Dev

如何知道证书的当前密码是否有效

来自分类Dev

如何知道Qt表格是否有效

来自分类Dev

如何知道curl脚本是否有效

来自分类Dev

如何在Java中使用相同的套接字连接执行多个HTTP请求?

来自分类Dev

我如何拒绝通过已建立的TCP连接流过的数据,但套接字连接应保持有效状态。

来自分类Dev

我如何拒绝通过已建立的TCP连接流过的数据,但套接字连接应保持有效状态。

来自分类Dev

在Scala中进行功能编程时,在递归中使用数组是否有效?

来自分类Dev

Python TCP套接字:如何知道特定连接是否已发送信息

来自分类Dev

哪种策略更有效:创建一个新的套接字或使用已经创建的套接字?

来自分类Dev

如何在没有套接字的Android中使用TCP客户端?

来自分类Dev

如何在uwp中使用OSM离线地图?没有可用的互联网连接时出现问题

来自分类Dev

PDO:如何检查连接是否有效?

来自分类Dev

如何在python中使用pass语句?如何有效使用pass语句?

来自分类Dev

如何在Python ssl套接字缓冲中使用select?

Related 相关文章

  1. 1

    如何在Java中使用套接字打印/获取传入的HTTP POST请求的有效负载(带有套接字)

  2. 2

    如何在Android主屏幕小部件中保持套接字连接有效

  3. 3

    .netcore套接字断开,而经典.net仍然有效

  4. 4

    如何在XHTML1.1中使用数据属性并且仍然有效

  5. 5

    如何在Python中使用管道时关闭套接字连接

  6. 6

    检查paramiko ssh连接是否仍然有效

  7. 7

    Laravel-如何检查(SSH)套接字是否有效?

  8. 8

    Laravel-如何检查(SSH)套接字是否有效?

  9. 9

    使用Java套接字时可以保证数据有效性吗?

  10. 10

    当数据行具有不同的有效格式时,如何在C ++中使用sscanf?

  11. 11

    如何验证使用Google登录的用户是否仍然有效?

  12. 12

    我如何知道wifi连接有效?

  13. 13

    如何知道Unicode标识符是否有效?

  14. 14

    PHP:如何知道链接是否是有效的YouTube链接?

  15. 15

    如何知道reCAPTCHA v3是否有效?

  16. 16

    如何知道证书的当前密码是否有效

  17. 17

    如何知道Qt表格是否有效

  18. 18

    如何知道curl脚本是否有效

  19. 19

    如何在Java中使用相同的套接字连接执行多个HTTP请求?

  20. 20

    我如何拒绝通过已建立的TCP连接流过的数据,但套接字连接应保持有效状态。

  21. 21

    我如何拒绝通过已建立的TCP连接流过的数据,但套接字连接应保持有效状态。

  22. 22

    在Scala中进行功能编程时,在递归中使用数组是否有效?

  23. 23

    Python TCP套接字:如何知道特定连接是否已发送信息

  24. 24

    哪种策略更有效:创建一个新的套接字或使用已经创建的套接字?

  25. 25

    如何在没有套接字的Android中使用TCP客户端?

  26. 26

    如何在uwp中使用OSM离线地图?没有可用的互联网连接时出现问题

  27. 27

    PDO:如何检查连接是否有效?

  28. 28

    如何在python中使用pass语句?如何有效使用pass语句?

  29. 29

    如何在Python ssl套接字缓冲中使用select?

热门标签

归档