c# - 如何在 C# 中接收服务器推送数据?

标签 c# push

我正在写一个程序。我的程序通过 HTTP 协议(protocol)从服务器接收数据。数据将由服务器推送到我的程序。 我尝试使用 WebRequest,但只收到一个 session 的数据。 我怎样才能保持连接活跃,从服务器continuosly接收数据, 感谢您的帮助。

SDK文档如下:

在GUEST或ADMIN的授权下,可以获得该系列的直播图片 (服务器推送)。要获取图像,请将请求发送到“/liveimg.cgi?serverpush=1”,如图所示 在图中。 2-1-1.
当摄像头收到客户端的上述请求后,发送返回如图 在图中。 2-2.
每个 JPEG 数据由“--myboundary”分隔,“image/jpeg”返回为 “--myboundary”之后的“Content-Type”标题。对于“Content-Length” header ,它返回 --myboundary 数据中的字节数(不包括“--myboundary”、每个 header 和 \r\n 作为分隔符)。在“Content-Length” header 和“\r\n”(定界符)之后,实际 将发送数据。
此数据传输将继续,直到客户端停止连接(断开连接),或者 发生一些网络错误。

整数长度; 字符串 uri = @"http://192.168.0.2/liveimg.cgi?serverpush=1 ";

        HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(uri);
        req.Credentials = new NetworkCredential("admin", "admin");
        req.KeepAlive = true;

        string line = "";

        HttpWebResponse reply = (HttpWebResponse)req.GetResponse();
        Stream stream = reply.GetResponseStream();

        System.Diagnostics.Debug.WriteLine(reply.ContentType);

        StreamReader reader = new StreamReader(stream);
        do
        {
            line = reader.ReadLine();
            System.Diagnostics.Debug.WriteLine(line);

            System.Threading.Thread.Sleep(300);

        } while (line.Length>0);

最佳答案

如果服务器支持,您可以长时间保持 HTTP 连接打开。 (如前所述,这将显着限制您可以支持的并发用户数。)

服务器需要设置 Response.Buffer=false,并有一个扩展的 ScriptTimeout(我假设您在服务器端使用 ASP.NET)。执行此操作后,您的页面可以根据需要继续发送 Response.Write 数据,直到完成所有操作。

您的客户端需要在连接完成之前处理传入的响应,而不是为完成响应而阻塞。

关于c# - 如何在 C# 中接收服务器推送数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1002677/

相关文章:

c# - 如何在 C# 中锁定文件夹

c# - 将 EWS 托管 Api 与 Office 365 Api 结合使用

c# - 仅在特定 html 文件上从 uiwebview 中删除表单助手 (Phonegap)

git - 尝试推送到 Azure Devops 时出现错误 "unable to parse remote unpack status"

PHP - array_push() 和 $array[] 不起作用?

c# - 如何解决泛型的 Swashbuckle/Swagger -UI 模型命名问题?

javascript - 如何从 foreach 循环创建动态 ID

android - 没有在android中使用parse.com获取推送通知

php - Git 将 git HEAD 和 repo 信息添加到文件中

grails - 无法将 grails 应用程序推送到 heroku master - 权限被拒绝(公钥)