0

如果 bool 为真,我有办法告诉 TCP 客户端一遍又一遍地连接,但我不知道这是否真的是一个好方法,因为我几乎一遍又一遍地告诉它,并忽略错误。

但我也不知道有任何其他方法可以做到这一点。

但也许你们会这样做,这是代码的一部分:

 while (capcon == true)
    {

        using (tcp = new TcpClient())
        {
            tcp.NoDelay = true;
            try
            {
                if (!tcp.Connected)
                    tcp.Connect(adress);
            }
            catch (Exception e)
            {
                if (e is SocketException || e is IOException) { }
                else
                    MessageBox.Show(e.Message + " Tcp Connect : Send");

            }
            using (var ms = new MemoryStream())
            {
                Stoptimer = new Stopwatch();
                int i = 0;
                while (tcp.Connected && capcon == true)
                {
                    try
                    {
                        FastMethods.CaptureBitBit(hwnd, JpegParam, jpeg, ms);
                        if (bsize != ms.Length && tcp.Connected)
                        {
                            bsize = ms.Length;
                            Stoptimer.Start();

                            tcp.GetStream().Write(BitConverter.GetBytes(bsize), 0, intsize);

                            tcp.GetStream().Write(ms.GetBuffer(), 0, (int)bsize);
                            //i++;
                            //tcp.GetStream().Write(rv, 0, rv.Length);
                            if (i > 100)
                            {
                                i = 0;
                                Stoptimer.Stop();
                                Console.WriteLine(Stoptimer.ElapsedTicks);
                                Stoptimer = new Stopwatch();
                            }

                        }
                        ms.SetLength(0);

                    }

                    catch (Exception e)
                    {
                        if (e is SocketException || e is IOException)
                        {
                            break;
                        }
                        else
                        {
                            MessageBox.Show(e.Message + ": Send Error");
                        }
                    }
                }
            }
        }
    }

好吧,正如你所看到的,这是一团糟,但这是我得到的。

4

1 回答 1

0

不确定我是否会使用嵌套的 while() 来执行此操作,可能会将连接逻辑分解为一个单独的方法并在需要时调用它,但这只是对可维护性的偏好。我还希望记录您与套接字相关的异常,以防您的断开连接是您可以修复的(如果您不知道它们是由什么引起的,那么您就没有希望阻止它们)。

您是否注意到性能问题或只是请求“最佳实践”? 如果是这种情况,代码审查可能会很有趣。

于 2013-08-22T23:44:09.770 回答