【问题标题】:TCP Client DisconnectsTCP 客户端断开连接
【发布时间】:2012-01-12 07:57:57
【问题描述】:

我是 TCPClient 的新手,我正在尝试制作一个网络摄像头应用程序,该应用程序将每个约 4kb 的小图像发送到另一个将运行相同程序的 IP。所以它会同时发送和接收。

我遇到的问题是 _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;
                }
            }
        }
    }

非常感谢。

【问题讨论】:

    标签: c# sockets networking tcp webcam


    【解决方案1】:

    它断开连接,因为您使用 using 语句处理 TcpClient。

    【讨论】:

    • 您好,感谢您的快速回复,我尝试以系统的方式取出所有的使用,但它仍然是一样的,但是当我一次将它们全部取出时,它绕过代码大约 3 次然后停了下来,但是显示的图片只有1张。
    • 好的,它已修复,我删除了所有使用但我仍然有一个框架,然后我将 _inClient 移到了 while 循环上方,一切都很好:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    相关资源
    最近更新 更多