我正在写一个程序。我的程序通过 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/