1
我是一个TCPClient的新手,我试图制作一个网络摄像头应用程序,它发送的小图像〜4kb到另一个IP将运行一个相同的程序。所以它会同时发送和接收。TCP客户端断开
问题我已经是_tcpOut在一次发送后断开连接,这意味着我只能看到一帧。在下面的代码中有两个部分,首先,NewFrameReceived在相机的每个新图像上运行,然后发送,另一个方法是接收方法,将接收到的图像放入图片框中(目前为我自己的127.0.0.1):
private void fChat_Load(object sender, EventArgs e)
{
// fire up listener
listeningThread.RunWorkerAsync();
// tcp server setup
_tcpOut = new TcpClient();
_tcpOut.Connect("127.0.0.1", 54321);
}
private void NewFrameReceived(object sender, NewFrameEventArgs e)
{
Bitmap img = (Bitmap)e.Frame.Clone();
byte[] imgBytes = EncodeToJpeg(img, 25).ToArray();
if (_tcpOut.Connected) <-- PROBLEM HERE, THIS IS FALSE ON 2ND ITERATION
{
using (NetworkStream ns = _tcpOut.GetStream())
{
if (ns.CanWrite)
{
ns.Write(BitConverter.GetBytes(imgBytes.Length), 0, 4);
ns.Write(imgBytes, 0, imgBytes.Length);
}
}
}
}
private void listeningThread_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
{
// start listening for connections
_tcpIn = new TcpListener(IPAddress.Any, 54321);
_tcpIn.Start();
while (true)
{
using (TcpClient _inClient = _tcpIn.AcceptTcpClient()) // blocks until connected
{
using (NetworkStream stream = _inClient.GetStream())
{
Byte[] imgSizeBytes = new Byte[4];
stream.Read(imgSizeBytes, 0, 4);
int imgSize = BitConverter.ToInt32(imgSizeBytes, 0);
Byte[] imgBytes = new Byte[imgSize];
stream.Read(imgBytes, 0, imgSize);
MemoryStream ms = new MemoryStream(imgBytes);
Image img = Image.FromStream(ms);
picVideo.Image = img;
}
}
}
}
非常感谢提前。
嗨,感谢您的快速回复,我试着以系统的方式使用所有的使用,但它仍然是一样的,但是当我把它们全部拿出来时,它绕过代码约3次然后停止,但是图片显示只有1. – sprocket12 2012-01-11 23:56:27
好吧,它的固定,我删除所有使用,但我仍然有一帧,然后我移动while循环上面的_inClient,它的一切都好:) – sprocket12 2012-01-12 00:10:19