Как я могу подключить интерфейс с сервером? - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть веб-страница (front-end), созданная с помощью ASP. NET (visual studio) на одном ноутбуке и сервер (back-end) для моей веб-страницы на другом ноутбуке , Во-первых, у меня есть страница входа в систему, и я хочу взять имя пользователя и пароль из textBox-es (front-end) и каким-то образом перенести данные на другой ноутбук, чтобы проверить, правильно ли это, а затем получить, если данные это правильно или нет. Внешний интерфейс находится на Windows, а сервер на Linux. Мой товарищ по команде использует python на сервере.

Я работаю с HTML, CSS и немного C# на интерфейсе, и я не знаю, как передать это имя пользователя и пароль моему товарищу по команде и как получить от него ответ. У него есть база данных на его ноутбуке, и он тот, кто проверит правильность пары или нет и отправит мне ответ, также он хочет кодировать в python.

Мы думаем, что можем установить магическое c соединение между ASP. NET и Node.js.

Как мне выполнить эту передачу данных?

Это мой первый раз, поэтому, пожалуйста, будьте осторожны, потому что я действительно не знаю, что делать.

1 Ответ

1 голос
/ 19 апреля 2020

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

Некоторые пояснения и отзывы по вашему вопросу.

У меня есть веб-страница (интерфейс), созданная с помощью ASP. NET ...

У вас здесь есть веб-приложение (то есть, в вашем случае включает одну или несколько веб-страниц). Уделяйте больше внимания таким мелочам, программирование само по себе является формой грамматического нацизма, но это не грамматика, и вас исправляет не человек, а машины и жизнь. Хорошее определение веб-приложения: https://blog.stackpath.com/web-application/

Мы думаем, что можем создать магическую c связь между ASP. NET и Node.js.

Я не специализируюсь на веб-приложениях, но мне кажется, что эта строка совершенно неожиданно, вы не указали, что используете или намереваетесь использовать Node.js в своей спине. конец; Вы указали, что используете Python, поэтому я проигнорирую это утверждение. Да, и нет магов c, есть только условия гонки.

Структурно говоря , я бы разделил этот вопрос на несколько более мелких. Далее следуют некоторые предложения.

Поскольку вы пытаетесь выполнить более сложную задачу, вы не можете избежать идеи шаблона проектирования (особенно из-за использования ASP. NET, предназначенного для работы с шаблонами).

Итак, ваш первый вопрос должен быть похож на

, как общаться с веб-сервером asp. net

Другой возможный вариант способ того, как сделать это, будет

как передавать данные на сервер C#

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

Так как вы sh отправляете пользовательские ЧУВСТВИТЕЛЬНЫЕ данные через inte rnet, тогда вы ДОЛЖНЫ Подумайте о безопасности. Дополнительные вопросы

как безопасно хранить пароль в базе данных

  1. Этот вопрос фактически приведет вас к примерам передачи пароль и, возможно, даже получение содержимого

Есть еще 2 вопроса, которые я sh хочу обсудить.

  1. При поиске в учебниках по Inte rnet вы будете Вероятно, вы увидите, как много работает с клиентскими и серверными приложениями на одном компьютере. Это все еще действительные уроки для вас! Читать их! Далее я объясню, почему это (почти) то же самое для вас, даже если ваш случай - это удаленный сервер.

  2. Вам нужно каким-то образом иметь возможность протестировать ваше приложение.

Адресация # 1

Почему работа с localhost (127.0.0.1) для вас такая же, как работа с реальным сервером (в вашем случае ).

Допустим, вы завершили sh приложение, серверная часть также сделана, и вы sh сможете общаться друг с другом. Вы читаете в inte rnet, что вам нужно знать IP-адрес сервера, поэтому вы просите своего партнера сообщить ему его IP-адрес. Вы ищете в дикой дикой сети и пришли к выводу, что для определения вашего IP-адреса вы попытаетесь:

  • выполнить ipconfig.exe (или какой инструмент вы используете в зависимости от вашей платформы) и получить * Значение 1133 *. вы можете предположить, что это IP-адрес, который вам нужно указать в приложении для подключения. Это ЛОЖЬ .

  • и вы пришли к выводу, что это не работает, вы обнаружите, что вы можете получить свой IP с помощью онлайн-сайтов, таких как https://whatismyipaddress.com/ и используйте этот IP для вашего адреса сервера. Это (в 99% случаев) ЛОЖЬ.

Немного поэзии

Рассматривайте IP при обращении в мир и ваш локальный (частный) IP как точное место в вашем доме. IP-адрес, который вы видите, является локальным IP-адресом, и он будет указывать, на каком стуле вы сидите, скажем, 12 из уже предоставленного примера. Любой человек в мире (у которого в любом случае есть 12 стульев) может сидеть на 12-м стуле в своем доме. Вы не можете использовать эту информацию для идентификации адреса кого-либо.

Откуда вы знаете, что этот IP является локальным IP?

Одним из способов было бы посмотреть полный вывод ipconfig.exe (или любого другого инструмента, который вы используете), где вы видите Wireless LAN adapter Wi-Fi: выше, откуда вы получили свой IP, LAN там ( hxxps: //en.wikipedia.org/wiki/Local_area_network) является индикатором этого.

Другое (более простое) - это распознавание диапазона IP (или визуального шаблона, если диапазон IP еще не является для вас четкой концепцией). Если он начинается с 198.168., то это локальный / частный IP-адрес. Пожалуйста, прочтите здесь больше: https://en.wikipedia.org/wiki/Private_network

IP являются ценным товаром (я не шучу). Поскольку мир развился, вы не можете теперь просто подключить свой компьютер к кабелю inte rnet, и вуаля, у вас есть свой собственный IP. Это было (относительно) верно, когда inte rnet впервые начал десятилетия go, но теперь IP-адреса управляются крупными (огромными) компаниями, которые выделяют их по своему усмотрению.

IP адресное пространство управляется глобально Управлением по присвоению номеров (IANA) Inte rnet и пятью региональными реестрами Inte rnet (RIR), ответственными на своих назначенных территориях за присвоение локальным реестрам Inte rnet, таким как Inte rnet поставщики услуг и другие конечные пользователи.

Wiki цитата: https://en.wikipedia.org/wiki/IP_address

Я также настоятельно (пожалуйста, рекомендую) прочитать следующий ответ hxxps: //superuser.com / questions / 323801 / how-can-i-own-an-ip-address

Если вы попросите своих (в реальном мире) соседей найти https://whatismyipaddress.com/ (и у них тот же провайдер и месячный план, что и у вас), существует большая вероятность, что они увидят тот же IP, что и вы. Проще говоря, IP-адрес, который вы видите там, при доступе к таким сайтам, как whatismyipaddress, - это IP-адрес, назначенный вашим провайдером сетевому узлу, в котором вы находитесь. Было бы пустой тратой IP назначить каждому пользователю IP (не упомянуть, что на самом деле математически не так много IP-адресов для этого).

Относительно вашего текущего положения. Я вижу 3 варианта.

Вариант 1 - купить хостинг

Если вы ответите «Я действительно хочу иметь отдельный IP» (или домен), тогда вы будете нужно купить в хостинге IP (хороший вид), который будет указывать на устройство, которое есть у хостинговой компании. Обычно вы покупаете домены, которые указывают на IP-адреса, но пока не будем. Вы подключитесь к этой машине / устройствам и установите там свой код на сервере. Тогда и только тогда вы можете получить IP / домен этого компьютера и использовать его в своем коде, и он будет работать (это 1% случаев, когда такие сайты, как whatismyipaddress, действительно вам помогут).

Рекомендуется Поиски: дешевый хостинг: D (или что-то бесплатное для студентов, если вы студент)

Вариант 2 - работать локально

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

Вариант 3 - LAN через inte rnet

Технически это было бы трудно описать, но идея в том, что вы используете программы, которые взаимодействуют через inte rnet, каждый из которых вы устанавливаете это на вашем компьютере, каким-то образом соединиться друг с другом (обычно пара имя / пароль), и это программное обеспечение кажется для программ на вашем компьютере, что вы на самом деле в настройке локальной сети (вариант 2) . В свое время я использовал хамачи, чтобы мы могли играть в CS онлайн: D.

  • hxxps: // www.howtogeek.com/172762/how-to-play-old-lan-games-over-the-internet/

Относительно # 2

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

Проще говоря, операция подделки чего-либо, возврата / класса, в вашем коде, чтобы вы могли правильно разработать и проверить, что ваш код известен как mocking

как смоделировать ответ сервера asp. net

  • hxxps: //gingter.org / 2018/07/26 / how-to-mock-httpclient-in-your- net - c -unit-tests /

Для начинающих программистов я думаю, что это одна из самых сложных частей. Понятие макетов и тестов, хотя они и кажутся простыми, обычно не вписывается в сознание молодых, невинных, ранее незапятнанных, будущих программистов. Их оставляют в покое с printfs до окончания обучения (даже смешанная порция ненависти к тестам, как жаль). Пожалуйста, для всего, что хорошо и свято в этом мире, не используйте этот код в производстве, запишите его после того, как вы его использовали, чтобы понять некоторые основы, ОЖОГ!

Здесь я изменил код Python 3.x BaseHTTPServer или http.server , чтобы вы могли запустить локальный HTTP-сервер на вашем компьютере и протестировать ваше приложение. Вы просто запускаете его (python3) и проверяете отправку имени пользователя и пароля на сервер, используя следующий языческий синтаксис:

127.0.0.1: 4242 /? User = aba & password = Aba1 который вернул бы Я буду вам позже

#!/usr/bin/python
from http.server import BaseHTTPRequestHandler,HTTPServer
from urllib.parse import urlparse, parse_qs
HOST = '127.0.0.1'  # Standard loopback interface address (localhost)
PORT_NUMBER = 4242  # Port to listen on (non-privileged ports are > 1023)

# !!!!!!!!!!!!!!! THIS IS ONLY FOR DIDACTICAL PURPOSE< NEVER EVER DO SOMETHING LIKE THIS IN PRODUCTION!!!!!!!
# NEVER EVER STORE PASSWORDS LIKE THIS !!!!!!!
# LITERRLAY NEVER!!!!!!
data_base = [
    {
        'user': 'ionzapada',
        'password': 'neaomat',
        'data': b"I like pie!"
    },
    {
        'user': 'aba',
        'password': 'Aba1',
        'data': b"I'al cohol you later"
    }
]

class myHandler(BaseHTTPRequestHandler):

    #Handler for the GET requests
    def do_GET(self):
        self.send_response(200)
        self.send_header('Content-type','text/html')
        self.end_headers()
        # Send the html message

        query_components = parse_qs(urlparse(self.path).query)
        # DO NOT USE THIS LOGIC ON ANY PRODUCTION PLATFORM!!!!
        # NEVER SEND PASSWORDS THIS WAY!!! 
        # NEVER SEND PASSWORDS!!!! 
        # NEVER SEND HASHES WITHOUT SALT!!!! 
        # NEVER IMPLEMENT YOUR OWN TRICKY ALGORITHM!!!!
        user_name = query_components.get("user",[None])[0]
        password = query_components.get("password",[None])[0]
        if user_name and password:
            for data_base_entry in data_base:
                if data_base_entry['user'] == user_name:
                    print('Found searched user: {}'.format(user_name))
                    if data_base_entry['password'] == password:
                        print('Valid password for user {} given; returning db data'.format(user_name))
                        self.wfile.write(data_base_entry['data'])
                    else:
                        self.wfile.write(b"Not supported!")
        else:
            self.wfile.write(b"Not supported!")        
        return

try:
    server = HTTPServer((HOST, PORT_NUMBER), myHandler)
    print('Started httpserver on port', PORT_NUMBER)
    server.serve_forever()

except KeyboardInterrupt:
    print('CTRL+C received, shutting down the web server')
    server.socket.close()

Я сжег палец, написав это, никогда не отправляю имена пользователей и пароли таким образом !!! НЕ ДАЖЕ ОТПРАВИТЬ ПАРОЛИ ДЛЯ ЛЮБВИ БОГА !!!!!!!! поиск стандартных и безопасных способов сделать это !!!!

Пожалуйста, также перейдите по ссылкам, указанным @ am c, они также являются хорошим началом.

PS Мне не разрешено иметь более 8 ссылок в одном посте, на некоторых опубликованных мной ссылках смените hxxp на http, чтобы они работали.

...