【发布时间】:2011-12-29 08:51:05
【问题描述】:
我制作了一个与 IP 摄像机通信的应用程序。这被配置为在预定义的地址上建立连接。 TCP 侦听器正在该地址上运行并接受来自摄像头的连接。当相机连接时,我发送命令以从相机获取 MJpeg 流,相机开始发送流以响应命令。
我正在使用异步方法从套接字读取流。但是一段时间后,我的应用程序在从网络流中读取数据时卡住了。
我正在使用此代码从网络流中读取数据,并且我在屏幕上写了一些消息以获取相机连接的状态。
private void ReadData()
{
try
{
string msg = "Reading Data... client connected " + _camClient.Connected.ToString() +
"... netStream Readable " +
_netStream.CanRead.ToString();
Console.WriteLine(msg);
_callback = new AsyncCallback(GetData);
_buffer = new byte[Buffersize];
_async = _netStream.BeginRead(_buffer, 0, Buffersize, _callback, null);
}
catch (Exception ex) { Console.WriteLine("ReadData: " + ex.Message); }
}
private void GetData(IAsyncResult result)
{
try
{
int read = _netStream.EndRead(result);
if (read > 0)
{
_data = new byte[read];
Array.Copy(_buffer, 0, _data, 0, read);
ProcessData();
}
ReadData();
}
catch (Exception ex) { Console.WriteLine("GetData: " + ex.Message); }
}
【问题讨论】:
-
卡住时最后写入的消息是什么?
-
我看到最后一条消息是“正在读取数据...客户端已连接为真...netStream 可读为真”。此消息应用程序卡住后。
标签: c# network-programming tcplistener