Одноадресная передача, гнездо не закрыто?
Эй, я создаю 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
это одноадресная передача