Если Вы похожи на меня, кто не имеет никакого формального образования информатики и интересуется, создавать/хотеть, чтобы знать, как работает компилятор:
я, рекомендуют "Процессоры языка программирования в Java: Компиляторы и Интерпретаторы", удивительная книга для программиста-самоучки.
С моей точки зрения, понимая их теория языка Бэйсик, автоматизируют машину, и теория множеств не является большой проблемой. Проблема состоит в том, как превратить те вещи в код. Вышеупомянутая книга говорит Вам, как записать синтаксический анализатор, аналитический контекст, и сгенерировать код. Если Вы не можете понять эту книгу, то я должен сказать, бросить создавать компилятор. Книга лучше всего программирует книгу, которую я когда-либо читал.
существует другая книга, также хорошая, Дизайн Компилятора в C. Существует много кода, и он говорит Вам все о том, как создать инструменты компилятора и лексического анализатора.
Здание компилятор является забавной практикой программирования и может преподавать Вам "кучу" программирования навыков.
не покупают книга Дракона. Это было пустой тратой денег и время и не для практика.
Я использовал программу под названием Hamachi , которая немного похожа на одноранговую vpn (виртуальная сеть-сеть). Затем я написал клиент-серверные приложения как есть. Это был быстрый способ получить функциональность подключения через Интернет без уловок, необходимых для работы с маршрутизаторами NAT.
Если вам нужно сделать это «должным образом», одним из распространенных методов является пробивка отверстий в udp . Когда вы отправляете веб-запрос, ваш брандмауэр знает, что в ответ ожидаются данные. Уловка состоит в том, что и клиент A, и клиент B связываются с сервером в Интернете. Сервер передает сведения о сделанном клиентом A запросе клиенту B и наоборот. Как только начальное соединение установлено, они могут продолжить общение, даже если главного сервера больше нет.
Существует метод, используемый многими клиентами, называемый "pin holing":
Я отправляю вам UDP-пакет, который пробивает дыру в моем брандмауэре (позволяя UDP-пакетам, которые, как предполагается, являются ответами моего брандмауэра, отправляться вами и приниматься мне). Этот пакет отбрасывается вашим брандмауэром.
Вы отправляете мне UDP-пакет, проделывая дыру в вашем брандмауэре. Этот пакет должен дойти до меня, после чего я могу отправить еще один, чтобы связаться с вами, и мы сможем общаться через наши брандмауэры по UDP.
Если бы я реализовывал это, я бы рассмотрел несколько вариантов.
Попросите брандмауэр перенаправить заданный порт на ПК внутри сети. Это позволит вам подключиться к серверу из внешнего мира.
Попросите клиента (ов) за брандмауэром подключиться к видимому серверу за пределами брандмауэра.
Короче говоря, по крайней мере одна сторона в разговоре должна быть быть видимым (сервером) для других, чтобы они могли подключиться к нему. Независимо от того, как было установлено соединение, клиент и сервер смогут без проблем обмениваться данными между собой.
Если оба клиента находятся за брандмауэром, который не был поврежден, и не используется программное обеспечение VPN, они общаются через сторонний сервер. Период.
Делайте то, что делают большинство троянов:
Обратное соединение
EDIT:
если две машины находятся за брандмауэрами, вам понадобится какой-то третий прокси-сервер