Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / System.Net.Sockets.TcpClient Как подключиться? / 5 сообщений из 5, страница 1 из 1
05.10.2010, 14:06
    #36882427
Dymanovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
System.Net.Sockets.TcpClient Как подключиться?
Здравствуйте. Написал на С# две программы общающиеся через 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
05.10.2010, 14:59
    #36882638
Dymanovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
System.Net.Sockets.TcpClient Как подключиться?
внутрь using () {} вставил код из примера MSDN по отправке на сервер сообщения. Когда в его конец добавил \n\r ответ пришёл - значит подключается нормально. По всей видимости проблема в формате взаимодействия библиотек NModBus. Кто нибудь сталкивался? Просто Slave пишется на ARM9 микроконтроллере, где поддерживается только С.
...
Рейтинг: 0 / 0
05.10.2010, 15:00
    #36882644
Dymanovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
System.Net.Sockets.TcpClient Как подключиться?
Надо их как-то подружить...
...
Рейтинг: 0 / 0
06.10.2010, 15:25
    #36884745
Dymanovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
System.Net.Sockets.TcpClient Как подключиться?
Уже разобрался. Всем спасибо.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
02.05.2018, 12:37
    #39638950
Linzi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
System.Net.Sockets.TcpClient Как подключиться?
Dymanovsky, здравствуйте, появилась аналогичная проблема. В одном месте нашей программы вызывается
master[i].ReadInputRegisters - данная операция проходит успешно при реконнекте
а в другом
master[i].ReadHoldingRegisters - вызывает исключение что на '"неподключенных сокетах невозможно подключение"".

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


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