System.net.sockets.socketexception: "обычно каждый адрес сокета (протокол, сетевой адрес или порт) может быть использован только один раз"
Когда я запускаю программу, она говорит::
Системы".Нет.Розетки.SocketException: "обычно каждый адрес сокета (протокол, сетевой адрес или порт) может использоваться только один раз"
Здесь он показывает ошибку:
socketCmdText = новый UdpClient(cmdTextPort);
-SocketCmdText также имеет значение null
Это мой код.:
UdpClient socketCmd; UdpClient socketCmdText; 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() { if (TempDevice == temperatureGauge.udp) { camIP = parameters[0]; socketCmdText = new UdpClient(cmdTextPort); socketCmdText.BeginReceive(new AsyncCallback(OnUdpDataCmdText), socketCmdText); socketCmd = new UdpClient(cmdPort); socketCmdText.BeginReceive(new AsyncCallback(OnUdpDataCmd), socketCmd); } }
Вот куда я посылаю сообщение:
private void requestData() { IPAddress _camip = IPAddress.Parse(camIP); IPEndPoint _ep = new IPEndPoint(_camip, cmdTextPort); byte[] _sendbuf = Encoding.ASCII.GetBytes("Cmd_ISL_GetCurrentSensorTemperature"); socketCmdText.Send(_sendbuf, _sendbuf.Length, _ep); byte[] _sendbuf2 = Encoding.ASCII.GetBytes("Get_Temp"); socketCmdText.Send(_sendbuf2, _sendbuf2.Length, _ep); } void OnUdpDataCmdText(IAsyncResult result) { try { // this is what had been passed into BeginReceive as the second parameter: UdpClient socket = result.AsyncState as UdpClient; // points towards whoever had sent the message: IPEndPoint source = new IPEndPoint(IPAddress.Any, cmdTextPort); // get the actual message and fill out the source: byte[] message = socket.EndReceive(result, ref source); // do what you'd like with `message` here: // schedule the next receive operation once reading is done: socket.BeginReceive(new AsyncCallback(OnUdpDataCmdText), socket); } catch (Exception e) { Console.WriteLine("Error TemperatureMesurement-Job OnUdpDataCmdTxt " + jobName + " : " + e.Message); } }
void OnUdpDataCmd(IAsyncResult result) { try { // this is what had been passed into BeginReceive as the second parameter: UdpClient socket = result.AsyncState as UdpClient; // points towards whoever had sent the message: IPEndPoint source = new IPEndPoint(IPAddress.Any, cmdPort); // get the actual message and fill out the source: byte[] message = socket.EndReceive(result, ref source); // do what you'd like with `message` here: string[] receiveString = BitConverter.ToString(message).Split('-'); if (camIP == source.Address.ToString()) { if (string.Concat(receiveString).Substring(0, 16) == "0201001001000002") { streamType = receiveString[8] + receiveString[9]; } } // schedule the next receive operation once reading is done: socket.BeginReceive(new AsyncCallback(OnUdpDataCmd), socket); } catch (Exception e) { Console.WriteLine("Error TemperatureMesurement-Job OnUdpDataCmd " + jobName + " : " + e.Message); } }
Что я уже пробовал:
Любая помощь будет оценена по достоинству. Пытаясь уже давно избавиться от этой проблемы, я попробовал использовать другой порт, закрыв его в диспетчере задач, но он, похоже, не работает. Но это не так