Member 14589606 Ответов: 0

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);
            }
        }


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

Любая помощь будет оценена по достоинству. Пытаясь уже давно избавиться от этой проблемы, я попробовал использовать другой порт, закрыв его в диспетчере задач, но он, похоже, не работает. Но это не так

0 Ответов