сетевое программирование на Java (1)

Java

сетевое программирование

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

Прежде чем изучать сетевое программирование, многие новички могут подумать, что сетевое программирование — это относительно сложная системная инженерия, и им нужно понять много базовых знаний, связанных с сетью.На самом деле это не так уж необходимо. Во-первых, давайте зададим вопрос: умеете ли вы пользоваться мобильным телефоном? Многие могут сказать, что обязательно это сделают, ведь это не просто нажать на номер телефона и позвонить, ведь это очень простое дело! На самом деле, новички могут сделать это так легко, если они начнут сетевое программирование!

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

Приступим к изучению технологии сетевого программирования на языке Java.

1.1 Обзор сети

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

1.1.1 Обзор компьютерных сетей

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

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

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

Маршрутизаторы и коммутаторы образуют ядро ​​компьютерной сети.Компьютеры являются лишь узлами и элементами управления в этой сети.Устройства соединяются через оптические волокна, сетевые кабели и т.д., таким образом образуя огромную компьютерную сеть.

Основным преимуществом сети является совместное использование: совместное использование устройств и данных.Сейчас наиболее распространенным устройством для совместного использования является принтер.Компании обычно требуется только один принтер.Общий доступ к данным заключается в хранении большого объема данных в группе машин, и другие компьютеры могут получить к нему доступ через сеть.Эти данные, такие как веб-сайты, банковские серверы и т. д.

Если вам нужно получить более базовые знания о сетевом оборудовании, вы можете прочитать учебник «Компьютерная сеть».Не обязательно укреплять фундамент на этапе базового обучения, но это необходимый базовый навык, если вы хотите иметь знания в области сетевого программирования.

Для сетевого программирования наиболее важным является взаимодействие между компьютерами и компьютерами, поэтому основная проблема заключается в том, как найти компьютеры в сети? Это требует понимания концепции IP-адресов.

Чтобы легко идентифицировать каждое устройство в сети, каждое устройство в сети будет иметь уникальный цифровой идентификатор, который является IP-адресом. В компьютерных сетях текущей спецификацией для именования IP-адресов является протокол IPv4, который указывает, что каждый IP-адрес состоит из 4 цифр от 0 до 255, например 10.0.120.34. Каждый компьютер, подключенный к сети, имеет уникальный IP-адрес.Этот IP-адрес может быть фиксированным, например, для различных серверов в сети, или динамическим, например, для пользователей широкополосного доступа, использующих коммутируемый доступ в Интернет по ADSL, независимо от того, получен ли он в Таким образом, или если это фиксировано, каждый компьютер имеет уникальный юридический IP-адрес, когда он подключен к Интернету, точно так же, как каждый номер мобильного телефона.

Однако, поскольку IP-адреса нелегко запомнить, для облегчения запоминания была создана другая концепция, например доменные имена, такие как sohu.com. IP-адрес может соответствовать нескольким доменным именам, а доменное имя может соответствовать только одному IP-адресу. Понятие доменного имени можно сравнить с адресной книгой в мобильном телефоне.Поскольку номер мобильного телефона неудобно запоминать, добавляется идентификационный номер имени, и имя можно выбрать и набрать во время фактического звонка.

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

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

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

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

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

Аппаратно предусмотрено, что номер порта должен находиться в диапазоне от 0 до 65535, каждый порт однозначно соответствует сетевой программе, а сетевая программа может использовать несколько портов. Когда такая сетевая программа запускается на компьютере, будь то клиент или сервер, она занимает как минимум один порт для сетевого взаимодействия. При получении данных они сначала отправляются на соответствующий компьютер, а затем компьютер пересылает данные в соответствующую программу по порту.

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

Однако при сетевом программировании одной концепции IP-адресов и портов по-прежнему недостаточно, здесь вводятся базовые знания о программном обеспечении, связанном с программным обеспечением.

1.1.2 Обзор сетевого программирования

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

Сетевое общение основано на модели «запрос-ответ». Чтобы понять эту модель, давайте сначала рассмотрим пример: люди, которые много смотрят телевизор, наверняка видели сцены допросов, обычно такие:

       警察:姓名       嫌疑犯:XXX       警察:性别       嫌疑犯:男       警察:年龄       嫌疑犯:29       ……скопировать код

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

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

Таким образом, две программы в сетевом программировании — это клиент и сервер, такие как программа QQ.Каждый пользователь QQ устанавливает клиентскую программу QQ, а серверная программа QQ работает в компьютерном зале Tencent.Предоставление услуг большому количеству Пользователи QQ. Структура такого типа сетевого программирования называется структурой клиент/сервер, также называемой структурой клиент/сервер, называемой структурой C/S.

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

На самом деле, при запуске многих программ не обязательно использовать выделенный клиент, а использовать общий клиент, такой как браузер, структура использования браузера в качестве клиента называется структурой браузер/сервер, также называемой Браузер/ Структура сервера.Сокращенно структура B/S.

Программы, использующие структуру B/S, должны развивать только серверную часть во время разработки.Преимущество этой структуры заключается в том, что нагрузка на разработку относительно невелика, и нет необходимости поддерживать клиентскую часть. Однако эта структура также имеет много недостатков, таких как относительно большие ограничения браузера, плохая выразительность и неспособность выполнять операции на системном уровне.

Короче говоря, структура C/S и структура B/S — это две распространенные структуры в сетевом программировании, структура B/S на самом деле является специальной структурой C/S.

Еще одно краткое введение в программы P2P (Point-to-Point), такие как BT, eDonkey и так далее. Программа P2P — это специальная программа. Программа P2P должна содержать как клиентские программы, так и программы на стороне сервера, такие как BT. Используйте программу на стороне клиента для подключения к другим семенам (на стороне сервера) и используйте программу на стороне сервера для подключаться к другим торрентам.BT-клиент передает данные. Если это не ясно, на самом деле программа P2P такая же, как и мобильный телефон.Когда мобильный телефон совершает вызов, он использует функцию на стороне клиента.Когда мобильный телефон находится в режиме ожидания, он может принимать звонки от других пользователей.Функция является серверной.Просто обычные мобильные телефоны не могут использовать функцию совершения звонков и приема звонков одновременно,а программа P2P реализует эту функцию.

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

Если вы не понимаете концепции соглашения, давайте возьмем другой пример. Помните, что есть фильм под названием «Вечная волна», в котором рассказывается история подпольной партии, пересылающей разведданные по радио. Здесь мы не обсуждаем сюжет фильма, а забота только о радио.данные отправлены. При фактической отправке телеграммы необходимо сначала преобразовать содержимое для отправки в код телеграммы, а затем отправить код телеграммы, и принимающая сторона получает код телеграммы.Если вам нужно понять содержание телеграммы, вы нужно перевести содержимое телеграммы по кодовой книге. . Кодовая книга здесь определяет формат данных, который в сетевом программировании называется протоколом для формата данных, передаваемых в сети.

Итак, как написать формат протокола? Ответ случайный. Поскольку уникальный код может быть сгенерирован в соответствии с этим форматом протокола, содержимое отправленных данных может быть однозначно проанализировано в соответствии с кодом. Кроме того, из-за различных форматов протоколов между различными сетевыми программами клиентские программы являются выделенными структурами.

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

Здесь представлены базовые знания сетевого программирования Глубокое понимание таких понятий, как IP-адреса, порты и протоколы, очень поможет в изучении последующих знаний. 13.1.3 Сетевой метод связи

В существующей сети есть два основных способа сетевого общения:

  • Метод TCP (протокол управления передачей)

  • Режим UDP (протокол пользовательских дейтаграмм)

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

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

Эти два метода передачи используются в реальном сетевом программировании.Важные данные обычно передаются по TCP, в то время как большое количество второстепенных данных передается по UDP.В некоторых программах эти два метода даже используются в комбинации.способ передачи данных .

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

Базовые знания по сетевому программированию введены так много.Если вам нужно глубоко понять соответствующие знания, пожалуйста, прочитайте специальные книги по компьютерным сетям.Давайте начнем знакомить с соответствующими технологиями сетевого программирования на языке Java.

Перепечатано с: http://www.cnblogs.com/springcsc/archive/2009/12/03/1616413.html Статья неуместна, пожалуйста, поправьте меня, вы также можете обратить внимание на мой публичный аккаунт WeChat:好好学java, для получения качественных ресурсов.