TCP-клиент отключается - PullRequest
       9

TCP-клиент отключается

1 голос
/ 12 января 2012

Я новичок в TCPClient. Я пытаюсь создать приложение для веб-камеры, которое отправляет небольшие изображения ~ 4 КБ каждое на другой 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;
                }
            }
        }
    }

Заранее большое спасибо.

1 Ответ

1 голос
/ 12 января 2012

Отключается, потому что вы утилизируете TcpClient с оператором , используя .

...