С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/25: Рейтинг темы: голосов - 25, средняя оценка - 4.52
3 / 3 / 2
Регистрация: 27.06.2013
Сообщений: 94
1

Сервер продолжает получать пустые сообщения после вызова метода Socket.Send

08.10.2018, 03:04. Показов 4453. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть сервер с сокетом, который выдает ответы на запросы. Связь с ним нормально работает через модем. Необходимо подключиться к нему с помощью программы на C# через сетевую карту на локальном компьютере. Пытаюсь сделать это с помощью кода ниже. Вместо myIPAddress и myPort в нем указаны значения IP-адреса и порта на сервере. Отправляю запрос на сервер и получаю ответ. Но после запроса на сервер с клиента отправляется несколько пустых строчек, это видно в логах на сервере. При связи через модем с использованием команд модема в готовой программе такого нет. Как сделать так, чтобы клиент не отправлял пустых строк на сервер после запроса, ждал ответа с сервера, а при необходимости снова отправлял запрос? Попытка закрыть, а потом снова открыть соединение выдает исключение Cannot access a disposed object, и все равно отправляется несколько пустых строк. Поиском нашел только одну ссылку с похожей проблемой.
https://stackoverflow.com/ques... ty-message
Автор вопроса сказал, что ему помог первый ответ в теме, у меня он не решает проблему, сервер продолжает отправлять пустые сообщения.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
private void button1_Click(object sender, EventArgs e)
        {
            byte[] bytes = new byte[1024];
            IPAddress ipAddress = IPAddress.Parse("myIPAddress");
            IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, myPort);            
            Socket mySocket = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
            mySocket.Connect(ipEndPoint);
            mySocket.Send(Encoding.UTF8.GetBytes("test\r"), 0, 4, SocketFlags.None);
            Thread.Sleep(100);            
            mySocket.Receive(bytes);
            MySocket.Shutdown(SocketShutdown.Both); 
            MySocket.Close();
            MessageBox.Show(Encoding.UTF8.GetString(bytes));
        }
Ответ по ссылке, который у меня не решает проблему.
C#
1
2
3
4
5
6
7
8
9
10
private void ReceiveMessage()
        {
            while (true) {
                if(_client.Available > 0) {
                    byte[] buffer = new byte[1024];
                    _client.Receive(buffer);
                    Console.WriteLine("A message has been received : " + Encoding.ASCII.GetString(buffer));
                }
            }
        }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.10.2018, 03:04
Ответы с готовыми решениями:

Socket не отсылает сообщения через SEND и не принимает
Когда конектится клиент с сервером, сервер должен отображать то, что передает клиент, т.е. asdf, но...

Сокеты: после вызова send программа зависает на функции recv
Извеняюсь за такое назание темы, но уже перепробовал 100 вариантов и постоянно выкидывает данное...

Assembler linux. Socket recv and socket send invalid arguments
Пишу шеллкод. Он ожидает подключения с 2222 порта, сам подключается на 1111 порт, выделяет память,...

Действия до и после вызова метода
Подскажите, пожалуйста, по реализации. Дан класс 'ServiceBase', содержащий ссылки на некоторые...

18
Эксперт .NET
12564 / 8731 / 1311
Регистрация: 21.01.2016
Сообщений: 32,760
08.10.2018, 06:39 2
Max_t, если ваш сервер написан в таком же стиле, что и клиент в примерах выше, то ничего удивительного в том, что вы мусор принимаете на сервере.

Данные, при передаче по сети, могут (и будут) разбиваться на более мелкие порции. И приниматься они будут, соответственно, меньшими блоками. Т.е. отправляя "test" одной порцией вы можете получить на сервере "tes" и "t".

Это значит, что вам нужно проверять сколько реально байт было получено и преобразовывать в строку только полученное количество байт, а не весь буфер как в коде выше. Примеры вы можете увидеть в данной замечательной статье.
0
3 / 3 / 2
Регистрация: 27.06.2013
Сообщений: 94
09.10.2018, 07:20  [ТС] 3
Метод Socket.Send на C# сначала отсылает правильную строку, и сервер отправляет правильный ответ. Но после этого с клиента на сервер отправляется около 230-234 строк нулевой длины. Количество непостоянное, но не отклоняется от величины 230-234 и не зависит от кода программы. Попытка закрыть соединение сразу после вызова метода Send (методы Socket.Disconnect, Socket.Shutdown, Socket.Close) ничего не меняет, пустые строки всё равно отправляются. При связи через модем такого нет, после отправки необходимой строки с помощью команд модема AT^SISW=0,[Length],\r StringToWrite\r пустые строки не отправляются. В чем здесь проблема, и что можно сделать?
0
Эксперт .NET
12564 / 8731 / 1311
Регистрация: 21.01.2016
Сообщений: 32,760
09.10.2018, 07:25 4
Цитата Сообщение от Max_t Посмотреть сообщение
строк нулевой длины.
Socket.Send() возвращает нуль, когда хочет сказать, что удалённая сторона разорвала соединение. Документацию на методы кто читать будет?

Добавлено через 34 секунды
Цитата Сообщение от Max_t Посмотреть сообщение
В чем здесь проблема, и что можно сделать?
Я уже описал в чём проблема.
0
3 / 3 / 2
Регистрация: 27.06.2013
Сообщений: 94
09.10.2018, 07:54  [ТС] 5
Цитата Сообщение от Usaga Посмотреть сообщение
Socket.Send() возвращает нуль, когда хочет сказать, что удалённая сторона разорвала соединение.
Проблема не в том, что он возвращает, а в том, что этот метод продолжает отсылать пустые строки на сервер после того, как отправляет на сервер необходимую строку. На сервере код на PHP, и при использовании модема на клиенте таких проблем, как с клиентом на C#, нет. Проверка количества байт на сервере при получении сообщения с модема не требуется. Сервер читает сообщение. Количество байт я могу определить, оно при получении нужной строки такое же, как с модема. Затем опять определяю на сервере количество байт, полученных с клиента на C#, и оно равно нулю, и так много раз. Модем не разбивает данные на мелкие порции и не отправляет пустые строки на сервер. Как сделать, чтобы такого не было с клиента на C#? Мелких порций, на которые разбивается нужная строка, пока не было, но отправляются пустые строки после отправки необходимой строки.
0
Эксперт .NET
12564 / 8731 / 1311
Регистрация: 21.01.2016
Сообщений: 32,760
09.10.2018, 08:04 6
Max_t, метод Socket.Send() отправляет только то, что вы ему скажете и только в том количестве, каком укажете. Сам он ничего не может отправить.

Я не могу сказать, каким образом вы на сервере данные принимаете, но явно делаете это не правильно. Канал передачи на это не может влиять. Всё, что может (и будет) от канала передачи (модем, LAN) ожидаться - фрагментирование отправленных данных. По коду выше ясно видно, что он к этому фрагментированию вообще никак не готов. Я железобетонно уверен, что и на PHP точно такой же говнокод.

Когда принимаете данные, то вам надо проверять сколько байт было получено. И надо быть готовым к тому, что отправленная строка будет разбита на N пакетов. Значит однократным вызовом Socket.Receive() не обойтись. И надо быть готовым к тому, что данных может быть отправлено больше, чем ваш буфер. И надо быть готовым к тому, что связь оборвётся в любом месте процесса обмена данными. Где это всё у вас в коде? На сервере тоже самое?
0
3 / 3 / 2
Регистрация: 27.06.2013
Сообщений: 94
09.10.2018, 08:38  [ТС] 7
Цитата Сообщение от Usaga Посмотреть сообщение
И надо быть готовым к тому, что отправленная строка будет разбита на N пакетов. Значит однократным вызовом Socket.Receive() не обойтись. И надо быть готовым к тому, что данных может быть отправлено больше, чем ваш буфер.
Менять код на сервере не хотелось бы, и хотелось бы, чтобы клиент не отправлял ненужных пустых данных больше, чем надо, и не разбивал строки на пакеты. С клиента на C# разбития строк пока не было, но есть отправка ненужных пустых строк. Можно попробовать отслеживать некорректную работу клиента на сервере, но лучше исключить такую некорректную работу. Повторю, что этих проблем у меня при связи через модем нет. Интересует вопрос, как сделать так, чтобы этого не было при связи через сетевую карту с клиента на C#. При использовании примера кода от Microsoft также отправляются пустые строки:
https://docs.microsoft.com/ru-... et-example
0
Эксперт .NET
12564 / 8731 / 1311
Регистрация: 21.01.2016
Сообщений: 32,760
09.10.2018, 08:51 8
Max_t, ещё раз: разбитие данных на пакеты происходит на транспортном уровне сетевого стёка. Код на C# или на PHP тут ни причём.

Ваш код обязан учитывать то, что отправленные данные будут фрагментированы. C# и модемы тут вообще ни причём!

Приём пустых строк на сервере - результат говнокода на сервере. Не хотите это исправлять - ради бога.

Цитата Сообщение от Max_t Посмотреть сообщение
но лучше исключить такую некорректную работу.
Переписывайте свой код. Других вариантов просто нет. Среда передачи данных тут нипричём. Фрагментирование данных - нормальная ситуация, ваш код к этому должен быть готов. И к сбоям при передаче данных тоже. Сейчас этого нет.

Добавлено через 6 минут

Не по теме:

Вы хоть комментарий оставляйте, когда минусуете. :)

0
3 / 3 / 2
Регистрация: 27.06.2013
Сообщений: 94
09.10.2018, 09:02  [ТС] 9
Цитата Сообщение от Usaga Посмотреть сообщение
C# и модемы тут вообще ни причём!
Мне лучше известно, что с модемом таких проблем нет. Сбои при передаче данных отслеживаю, но они не связаны с отправкой пустых строк. Поищу альтернативы методу Socket.Send или попытаюсь изменить код с использованием этого метода. Отбрасывать пустые строки на сервере можно, но лучше, чтобы их не было. Если кто знает, что можно изменить на клиенте, интересует в первую очередь такая информация.
0
Эксперт .NET
12564 / 8731 / 1311
Регистрация: 21.01.2016
Сообщений: 32,760
09.10.2018, 09:09 10
Max_t, ещё раз: клиент не отправляет никаких пустых строк. По крайней мере тот код, что выше, такого не делает.

Зато вот это:

C#
1
2
mySocket.Receive(bytes);
Encoding.UTF8.GetString(bytes)
... легко вам вернёт пустую строку. Метод Receive возвращает количество принятых байт. 0 будет означать, что соединение было закрыто. Но вы это не проверяете. И всё равно пытаетесь получить строку из буфера. Но в буфер ничего не было записано и при создании там одни нули. GetString вам вернёт пустую строку.

Если на сервере, что на PHP, точно такой же код, то наблюдаемые вами пустые строки вполне ожидаемы.

Код сервера вы не показали, а упорно грешите на непойми что. Ваш код ненадёжен и не учитывает описанные (уже несколько раз) мной ситуации. Не хотите прислушиваться - ваше право. Минусуйте, обижайтесь, но проблема в вашем говнокоде.
1
3 / 3 / 2
Регистрация: 27.06.2013
Сообщений: 94
09.10.2018, 10:07  [ТС] 11
Может быть и так, что модем сразу разрывает связь после отправки строки, и сервер больше не читает новых строк. А клиент на C# продолжает держать связь, и сервер пытается читать новые строки, которые оказываются пустыми. Или существует разный таймаут на разных клиентах и на сервере при передаче и получении данных. Соединение все время открыто, но пустые строки с модема сервер читать не пытается. Хотелось бы уточнить, в каком режиме сервер будет пытаться считывать данные, а в каком не будет. И от чего зависит этот режим на клиенте.
0
Эксперт .NET
12564 / 8731 / 1311
Регистрация: 21.01.2016
Сообщений: 32,760
09.10.2018, 10:19 12
Max_t, сервер не сможет читать новые строки, если не будут приходить данные. А данные не будут приходить, если связи нет. Вы можете получать пустые строки в сценарии описанном мной выше, но я не знаю как это ложится на специфику API PHP.

А о том, что другая сторона "пропала" сервер или клиент узнают не сразу, а по истечении тайм-аута. Естественно, что обмена данными в это время уже не будет. И получение пустых строк - прямое следствие косяка в коде сервера. В любом случае, мистики тут нет и причины такого поведения по коду видны сразу. В случае клиента такое видно. Я это прокоментировал.

Что у вас на сервер я могу только гадать глядя на фиговенький код клиента. Могу дать следующие рекомендации:

* Данные могут приходить меньшими порциями, чем вы ожидаете.
* Количество таких порций может быть значительно больше, чем ваш буфер (в данном случае - один килобайт).
* API работы с TCP-сокетами могут сигнализировать о ошибке при обмене данными или о закрытии соединения. Эти "сигналы" нужно обязательно проверять и обрабатывать.

Устраните данные замечания в коде клиента. Почти неверняка, такое есть и на сервере (код вы не показали, тут - гадаем). Там это тоже нужно устранить. После - уже смотреть, воспроизводиться ли описанное поведение.
0
3 / 3 / 2
Регистрация: 27.06.2013
Сообщений: 94
10.10.2018, 08:27  [ТС] 13
Уточнил, что сервер пытается прочитать пустые строки не после вызова метода Socket.Send, как написал выше, а после закрытия соединения любым способом. ОС на сервере Linux, используется, как указал выше, скрипт на PHP. На клиенте Windows 7. В соответствии с рекомендациями в Интернете, сервер закрывает соединение, если для прочитанной строки $input выполняется условие $input===false
При закрытии соединения со стороны клиента через модем по команде AT^SISC=0 сервер получает данные, которые равны значению false в PHP, и закрывает соединение со стороны сервера. При закрытии соединения со стороны клиента такие данные сервер не получает и продолжает пытаться получать пустые строки. После получения около 230 строк появляется ошибка функции PHP socket_write, что не удалось оправить ответ на клиент, и функция возвращает false. В такой ситуации на сервере предусмотрено закрытие соединения, и оно закрывается со стороны сервера. Если убрать закрытие соединения $input===false при соединении со стороны клиента с помощью модема, сервер один раз получает значение false, а затем пытается получать пустые строки.
Разница в том, что модем при закрытии соединения, похоже, отправляет данные, которые в PHP равны значению false, а клиент на C# таких данных не отправляет. Использование класса C# TCPClient вместо Socket ситуацию не меняет.
Пустую строку при сравнении с помощью оператора === PHP не считает равной значению false. Можно сделать условие на сервере, чтобы соединение разрывалось при получении определенной строки или при получении пустой строки. Но, возможно, что пустую строку сервер может получать при отсутствии связи, и лишний раз разрывать соединение может быть не нужно. Отправлять слово, при котором соединение разрывается, тоже считаю не лучшим вариантом.
Вопрос, в чем отличие значения false PHP от пустой строки, кроме типа, если с этим значением типа bool сравниваются данные с клиента с помощью оператора ==== Можно ли передать такие данные на сервер на PHP с клиента на C# и как, чтобы сервер считал их равными значению false? Например, с помощью стандартных методов закрытия соединения или с помощью альтернативы классу Socket.
0
Эксперт .NET
12564 / 8731 / 1311
Регистрация: 21.01.2016
Сообщений: 32,760
10.10.2018, 08:40 14
Цитата Сообщение от Max_t Посмотреть сообщение
сервер пытается прочитать пустые строки не после вызова метода Socket.Send, как написал выше, а после закрытия соединения любым способом.
О чём я вам уже раза три сказал.

Цитата Сообщение от Max_t Посмотреть сообщение
Вопрос, в чем отличие значения false PHP от пустой строки, кроме типа, если с этим значением типа bool сравниваются данные с клиента с помощью оператора ====
Это вы в разделе PHP спросите. Но моё предположение о том, что на сервере какой-то говнокод, который не может нормально обработать событие закрытия, оказалось верным.

Добавлено через 10 минут
Max_t, я вам рекомендую показать свой код PHP-сервера в ветке PHP-стов и получить чёткие рекомендации по приведению его в порядок. Как привести код клиента на C# в порядок я уже описал. И даже ссылку привёл.
0
3 / 3 / 2
Регистрация: 27.06.2013
Сообщений: 94
11.10.2018, 00:28  [ТС] 15
Значение false на сервере возвращает функция PHP socket_read, когда модем на клиенте закрывает соединение. При успешном чтении данных она возвращает данные с клиента. Никаких данных со значением false на сервер не передается, не сразу понял, что это возвращается функцией. Команда модема и клиент на C# для соединения через сетевую карту при закрытии соединения на клиенте ведут себя по-разному. При закрытии соединения на клиенте модемом функция socket_read один раз возвращает значение false. При получении значения false на сервере предусмотрено закрытие соединения со стороны сервера. В результате соединение корректно закрывается клиентом и сервером. socket_read будет получать пустые строки на сервере после закрытия соединения модемом на клиенте, только, если убрать код, закрывающий соединение на сервере:
if($input === false) socket_shutdown($client);
При закрытии соединения клиентом на C# любым способом - при вызове метода типа Socket.Close, при возврате из метода, создающего соединение с сокетом или при завершении работы программы клиента функция socket_read на сервере не возвращает значения false и продолжает пытаться читать пустые строки, пока не появляется ошибка записи ответа клиенту, при которой также предусмотрено закрытие соединения со стороны сервера.
Проблема пустых строк описана в комментариях по ссылке
http://php.net/manual/ru/function.socket-read.php
Рекомендуют использовать функцию socket_recv
http://php.net/manual/en/function.socket-recv.php
Попробовал, то же самое, возвращает false только при закрытии клиента с модема, но не клиента на C# при соединении через сетевую карту.
Вопрос, как корректно с помощью PHP на сервере отслеживать закрытие соединения со стороны клиента на C#. Или что можно поменять на клиенте или какие использовать другие клиенты на C#, чтобы сервер отслеживал закрытие клиента, возвращая значение false функцией socket_read или другим способом. Можно передавать определенное слово на сервер для закрытия, но это считаю не лучшим способом.
То есть проблема в том, что закрытие соединения с помощью модема корректно обрабатывается функцией PHP socket_read на сервере, которая при этом выдает значение false, а закрытие соединения клиентом на C# этой функцией корректно не обрабатывается, и она продолжает пытаться получать пустые строки. А Вам, Usaga, советую писать вежливо и по делу.
0
Эксперт .NET
12564 / 8731 / 1311
Регистрация: 21.01.2016
Сообщений: 32,760
11.10.2018, 04:43 16
Max_t, я вам писал очень вежливо и очень по делу. Я вам указал на конкретную неправильную вещь в приёме данных на клиенте. На пальцах расписал почему это неправильно и к чему может привести. Ссылку дал с примерами, где описывается корректный способ приёма данных через сокеты. Вам пофигу. Ну и флаг вам в руки.

К проблемам сервера код клиента отношения не имеет никакого. По крайней мере то, что было показано, пустые строки не отправляет. Это ваш говнокод на сервере их (пустые строки) принимает. Я железобетонно уверен, что проблема там точно такая же, что и в коде клиента - вы плевать хотели на служебную информацию, которую вам возвращают методы приёма данных. Или обрабатываете вы её как попало.

Показывайте код сервера или решайте свою проблему в гордом одиночестве. Мне уже надоело вам доказывать, что глючный код будет глючить. А свои пространные описания оставьте себе, от них толку нуль.
0
3 / 3 / 2
Регистрация: 27.06.2013
Сообщений: 94
11.10.2018, 08:39  [ТС] 17
Нашел информацию, что функция PHP socket_read при закрытии соединения на клиенте может возвращать как false, так и пустую строку. У меня это зависит от клиента. Поэтому рекомендуют проверять значение, возвращаемое этой функцией, на равенство false или пустой строке. Пока открыто соединение на клиенте, сервер не получает пустых строк, и соединение лишний раз при такой проверке закрываться не должно. Поэтому собираюсь сделать проверку на false или пустую строку. Некорректная работа, которая была у одной функции, не повод обзывать код словами, самое мягкое из которых "глючный".
0
Эксперт .NET
12564 / 8731 / 1311
Регистрация: 21.01.2016
Сообщений: 32,760
11.10.2018, 09:22 18
Max_t, вообще, повод. Документацию на функцию socket_read надо было прочитать сразу, а не бежать жаловаться на клиента на C# написанном.

Кстати, косяк в коде клиента тоже рекомендую поправить.
0
95 / 62 / 22
Регистрация: 11.03.2013
Сообщений: 606
Записей в блоге: 6
02.12.2019, 22:53 19
Цитата Сообщение от Usaga Посмотреть сообщение
Метод Receive возвращает количество принятых байт. 0 будет означать, что соединение было закрыто
Usaga У меня схожая проблема, но только дело в том, что клиент на WF и консольное приложение легко закрываются, вот только проблема с Unity. Я делал проверку на количество байт. Если их ноль я отключал клиента. Вот только если это сделать, клиент после отправки первого сообщения сразу же отключается.

Как логика проверки должна выглядеть?

соседний форум
0
02.12.2019, 22:53
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.12.2019, 22:53
Помогаю со студенческими работами здесь

После вызова метода load() не работает JS
Всем привет, при нажатии на параметры через метод load() загружается html страница и вставляется в...

Программа крашится после вызова метода
Суть программы в том, чтобы выводить поздравление, используя имена, праздники и пожелания, которые...

Cout не работает после вызова метода append
#include <iostream> #include <cstddef> // size_t #include <cstring> // strlen, strcpy using...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
Полезные поделки на Arduino, которые можно сделать самому
raxper 06.01.2025
Arduino как платформа для творчества Arduino представляет собой удивительную платформу для технического творчества, которая открывает безграничные возможности для создания уникальных проектов. Эта. . .
Подборка решений задач на Python
IT_Exp 06.01.2025
Целью данной подборки является предоставление возможности ознакомиться с различными задачами и их решениями на Python, что может быть полезно как для начинающих, так и для опытных программистов. . . .
С чего начать программировать микроконтроллер­­ы
raxper 06.01.2025
Введение в мир микроконтроллеров Микроконтроллеры стали неотъемлемой частью современного мира, окружая нас повсюду: от простых бытовых приборов до сложных промышленных систем. Эти маленькие. . .
Из чего собрать игровой компьютер
inter-admin 06.01.2025
Сборка игрового компьютера требует особого внимания к выбору комплектующих и их совместимости. Правильно собранный игровой ПК не только обеспечивает комфортный геймплей в современных играх, но и. . .
Обновление сайта www.historian.b­y
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
Модель полного двоичного сумматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
Это мы не проходили, это нам не задавали...(аси­­­­­­­­­­­­­­­­­­­­­­­­­­х­р­о­н­­н­­­ы­­й счётчик с управляющим сигналом зад
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru