我使用以下代码从IP摄像机捕获图像:
HttpWebRequest reqs = (HttpWebRequest)WebRequest.Create("http://" + ip + snapshotCommand);
reqs.Method = "POST";
reqs.Timeout = 4000;
reqs.Credentials = new NetworkCredential(user, pass);
reqs.PreAuthenticate = true;
HttpWebResponse resp = (HttpWebResponse)reqs.GetResponse();
if (resp != null)
{
Stream stm = resp.GetResponseStream();
img = new Bitmap(stm);
stm.Close();
}
但是stream抛出异常,因为
CanSeek
和CanWrite
为false。我尝试了许多方法,例如
Copyto
(MemoryStream),但是问题仍然存在。你能帮我吗?
这是使用MemoryStream的代码:
Stream stm = resp.GetResponseStream();
MemoryStream ms = new MemoryStream();
stm.CopyTo(ms);
ms.Position = 0;
而
ReadTimeout
和WriteTimeout
的“ ms”则为:消息“此流不支持超时”。
因为
canTimeout()
对于MemoryStream也是假的。最终,我找到了这个解决方案,并且效果很好:
https://stackoverflow.com/a/2368505/492628
最佳答案
如果无法找到该流,则应该能够将其复制到内存流中
以下a post可能会有所帮助。
关于c# - 为什么当Stream.CanSeek为false时我应该怎么做,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43263004/