powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / System.Net.Sockets.TcpClient Как подключиться?
5 сообщений из 5, страница 1 из 1
System.Net.Sockets.TcpClient Как подключиться?
    #36882427
Dymanovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте. Написал на С# две программы общающиеся через System.Net.Sockets.TcpClient - работают нормально.
При попытке подключиться к существующему серверу или микроконтроллеру получаю ошибку 10022 "Операция не разрешается на неподключённых сокетах". Что не так?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
        public const byte ModbusDevAddr = 1;
        public const byte ModbusMaxRegXCHG = 123;
        public const ushort defaultExchangePort = 8080;
        public const String defaultIPAddress = "192.168.5.2";


        static private ushort[] fnModBusRead(byte slaveAddress, ushort startReg, ushort numberofPoints)
        {
            ushort[] resultArray = new ushort[numberofPoints];

            try
            {
                //System.Net.IPEndPoint TargetEndPoint = new System.Net.IPEndPoint(0, 32567);
                //TargetEndPoint.Address = new System.Net.IPAddress(new byte[] { 192, 168, 5, 111 });               
                using (System.Net.Sockets.TcpClient client = new System.Net.Sockets.TcpClient())
                //using (System.Net.Sockets.TcpClient client = new System.Net.Sockets.TcpClient(TargetEndPoint))
                {
                    client.Connect(new System.Net.IPEndPoint(System.Net.IPAddress.Parse(defaultIPAddress), defaultExchangePort));                  
                    Modbus.Device.ModbusIpMaster master = Modbus.Device.ModbusIpMaster.CreateIp(client);

                    ushort messageCount = (ushort)(numberofPoints / ModbusMaxRegXCHG);
                    byte messageRest = (byte)(numberofPoints % ModbusMaxRegXCHG);

                    ushort i;
                    for (i = 0; i < messageCount; i++)
                    {
                        ushort[] receiveArray = new ushort[ModbusMaxRegXCHG];
                        receiveArray = master.ReadHoldingRegisters(ModbusDevAddr, (ushort)(startReg + i * ModbusMaxRegXCHG), ModbusMaxRegXCHG);
                        Array.Copy(receiveArray, 0, resultArray, (ushort)(i * ModbusMaxRegXCHG), ModbusMaxRegXCHG);
                    }
                    if (messageRest > 0)
                    {
                        ushort[] receiveArray = new ushort[messageRest];
                        receiveArray = master.ReadHoldingRegisters(ModbusDevAddr, (ushort)(startReg + i * ModbusMaxRegXCHG), messageRest);
                        Array.Copy(receiveArray, 0, resultArray, (ushort)(i * ModbusMaxRegXCHG), messageRest);
                    }
                }
            }
            catch (SystemException e)
            {
                System.Console.WriteLine("Ошибка: " + e.Message);                

            }            
            return resultArray;
        }

Исключение появляется здесь:
Код: plaintext
client.Connect(new System.Net.IPEndPoint(System.Net.IPAddress.Parse(defaultIPAddress), defaultExchangePort));

А срабатывает (вылетает в catch) тут:
Код: plaintext
1.
receiveArray = master.ReadHoldingRegisters(ModbusDevAddr, (ushort)(startReg + i * ModbusMaxRegXCHG), ModbusMaxRegXCHG);
или тут:
Код: plaintext
receiveArray = master.ReadHoldingRegisters(ModbusDevAddr, (ushort)(startReg + i * ModbusMaxRegXCHG), messageRest);
...
Рейтинг: 0 / 0
System.Net.Sockets.TcpClient Как подключиться?
    #36882638
Dymanovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
внутрь using () {} вставил код из примера MSDN по отправке на сервер сообщения. Когда в его конец добавил \n\r ответ пришёл - значит подключается нормально. По всей видимости проблема в формате взаимодействия библиотек NModBus. Кто нибудь сталкивался? Просто Slave пишется на ARM9 микроконтроллере, где поддерживается только С.
...
Рейтинг: 0 / 0
System.Net.Sockets.TcpClient Как подключиться?
    #36882644
Dymanovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо их как-то подружить...
...
Рейтинг: 0 / 0
System.Net.Sockets.TcpClient Как подключиться?
    #36884745
Dymanovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уже разобрался. Всем спасибо.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
System.Net.Sockets.TcpClient Как подключиться?
    #39638950
Linzi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dymanovsky, здравствуйте, появилась аналогичная проблема. В одном месте нашей программы вызывается
master[i].ReadInputRegisters - данная операция проходит успешно при реконнекте
а в другом
master[i].ReadHoldingRegisters - вызывает исключение что на '"неподключенных сокетах невозможно подключение"".

Поделитесь опытом как вы устранили эту проблему
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / System.Net.Sockets.TcpClient Как подключиться?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]