Member 14589606 Ответов: 0

Одноадресная передача, гнездо не закрыто?


Эй, я создаю UDP-клиент сверху, а затем создаю его снова в задании инициализации, когда я удаляю try and catch, сокет имеет значение null, я общаюсь через сокет, а затем закрываю его после этого я повторяю, но либо порт он не закрыт должным образом, так как он отображает ошибку, указывающую, что каждый адрес сокета должен использоваться только один раз.


private const int cmdTextPort = 6666;
   private const int cmdPort = 6676;
   private double tempSensTop = 0;
   private double tempSensBottom = 0;
   private double tempProcessor = 0;
   private String firmware = "";
   private String streamType = "";
   private String camIP = "";





   public override void initializeJob()
   {
       try
       {
           if (TempDevice == temperatureGauge.udp)
           {
               camIP = parameters[0];
               socketCmdText1 = new UdpClient(cmdTextPort);
               socketCmdText1.BeginReceive(new AsyncCallback(OnUdpDataCmdText), socketCmdText1);
               socketCmd1 = new UdpClient(cmdPort);
               socketCmd1.BeginReceive(new AsyncCallback(OnUdpDataCmd), socketCmd1);
           }
           if (TempDevice == temperatureGauge.GMH3700)
           {
               PortGMH3700.PortName = ComPortbyUser;
               PortGMH3700.BaudRate = 4800; /* Baudrate '4800' oder '38400' */
               PortGMH3700.Parity = Parity.None;
               PortGMH3700.DataBits = 8;
               PortGMH3700.StopBits = StopBits.One;
               PortGMH3700.DtrEnable = true;
               PortGMH3700.RtsEnable = false;
               PortGMH3700.Open();
           }
       }
       catch (Exception e)
       {
           Console.WriteLine("Error TemperatureMesurement-Job initialization " + jobName + " : " + e.Message);
       }
   }

   public override void deinitializeJob()
   {
       try
       {
           if (TempDevice == temperatureGauge.udp)
           {
               socketCmd1.Close();
               socketCmdText1.Close();
           }
           if (TempDevice == temperatureGauge.GMH3700)
           {
               PortGMH3700.Close();
           }
       }
       catch (Exception e)
       {
           Console.WriteLine("Error TemperatureMesurement-Job deinitialization " + jobName + " : " + e.Message);
       }
   }


Что я уже пробовал:

Вот как я выполняю свою работу



public void ExecuteJob()
        {
            int measureEventTime = 0;
            intervalComparison = measurementEvent.repetitionIntervalTime * 0.75;
            if (measurementEvent.eventRepetitionCount > 1)
            {
                measureEventTime = (int)(measurementEvent.eventIntervalTime * measurementEvent.eventRepetitionCount);
                intervalComparison = measurementEvent.eventIntervalTime * 0.75;
            }

            initializeJob();
            try
            {
                if (IsRepeatable())
                {
                    // execute the job in intervals determined by the methd
                    // GetRepetionIntervalTime()
                
                    Thread.Sleep(measurementEvent.startDelay);
                    while (jobActive)
                    {
                        for (int i = 0; i < measurementEvent.eventRepetitionCount; i++)
                        {
                            //Thread thread = new Thread(new ThreadStart(DoJob));
                            //thread.Start();
                            System.Threading.Tasks.Task tStart = System.Threading.Tasks.Task.Run(() => { DoJob(); });
                            Thread.Sleep(measurementEvent.eventIntervalTime);
                        }
                        Thread.Sleep(measurementEvent.repetitionIntervalTime - measureEventTime);
                    }
                }
                // since there is no repetetion, simply execute the job
                else
                {
                    DoJob();
                }
            }
            catch (ThreadInterruptedException e)
            {
                Console.WriteLine(String.Format("The Job \"{0}\" has been interrupted successfully.", jobName));
            }
            finally
            {
                deinitializeJob();
            }
        }

Gerry Schmitz

Я не знаю, зачем вам нужно так много сокетов ... ведущие и ведомые устройства общаются по адресам; либо IP-адреса и / или идентификатор устройства в заголовке; где "нулевое устройство" может быть широковещательным для всех.

Member 14589606

это одноадресная передача

0 Ответов