1. Основные концепции сети
Во -первых, уточните концепцию: сетевое программирование! = Программирование веб -сайта, сетевое программирование теперь обычно называют программированием TCP/IP.
2. Протокол сетевой связи и интерфейс
3. Идея наслоения протокола связи
4. Справочная модель
V. IP -протокол
У каждого компьютера есть уникальный IP -адрес, так что сообщение об ошибке не будет передано при общении друг с другом.
IP -адрес разделен на четыре сегмента на одну точку. IP -адрес внутри компьютера представлен четырьмя байтами. Один байт представляет собой сегмент, и максимальное число, представленное каждым байтом, может достигать только 255.
VI Протокол TCP и протокол UDP
TCP и UDP расположены на одном и том же слое и оба основаны на IP -слое. Поскольку два компьютера имеют разные IP -адреса, эти два компьютера можно различить и могут поговорить друг с другом. Как правило, есть два способа поговорить: первым является TCP, а второй - UDP. TCP является надежным соединением. TCP - это как телефонный звонок. Вам нужно сначала позвонить другой стороне и подождать, пока другая сторона ответит, прежде чем продолжить поговорить с другой стороной. То есть вы должны подтвердить, что вы можете отправить сообщение перед отправкой сообщения. TCP загружает что -нибудь надежное. Пока соединение установлено на двух машинах, данные, отправленные на машине, определенно будут переданы на машину другой стороны. UDP похож на отправку телеграммы, и это будет сделано, если она будет отправлена. Неважно, получает ли другая сторона это или нет, поэтому UDP ненадежен. Хотя TCP передает данные надежно, он передается медленно. UDP передает данные ненадежными, но он передается быстро.
7. Программирование сокета
Как правило, сетевое программирование называется программированием сокетов, а сокет означает «гнездо» на английском языке.
Установите гнездо на обоих компьютерах, а затем подключите два конца кабеля к разъемам двух компьютеров, чтобы эти два компьютера могли установить соединение. Этот розетка - гнезда.
Поскольку они могут общаться друг с другом, я сказал, что вы мой сервер, но в логическом смысле я должен сначала отправить вам вещи, а затем вы справитесь с ними. Итак, вы называете его сервером. Но в техническом смысле только TCP разделит сервер и клиента. Для UDP, в строгом смысле, так называемый сервер и клиент нет. Сокет TCP -сервера называется Serversocket, а сокет клиента называется Socket.
Когда два компьютера подключены друг к другу, вы должны сначала знать их IP -адреса, но предоставление только IP -адресов недостаточно. Вы также должны иметь номер порта подключения, то есть, к какому приложению подключиться.
Номер порта используется для различения различных приложений на машине. Номер порта занимает 2 байта внутри компьютера. На машине до 65536 номеров портов. Приложение может занять несколько номеров портов. Если номер порта занят приложением, другие приложения больше не смогут использовать этот номер порта. Помните, что если программа, которую мы пишем, должна занимать номер порта, если она хочет занять номер порта выше 1024, не занимайте номер порта ниже 1024, потому что система может быть реквизирована в любое время. Сам номер порта делится на порт TCP и порт UDP. Порт TCP 8888 и UDP -порт 8888 представляют собой два совершенно разных порта. Есть 65536 портов TCP и порты UDP.
8. Модель связи с сокетом TCP
9. Примеры использования розетки
Serversocket
Импорт java.net.*; импортировать java.io.*; public class testserversocket {public static void main (String args []) бросает исключение {serversocket ss = new Serversocket (6666); /* При создании объекта Serversocket ему часто присваивается номер порта. Значение состоит в том, чтобы использовать, какой номер порта должен использовать новый объект Serversocket, и какой номер порта для прослушивания подключения клиента. Следовательно, значение определения номера порта состоит в том, чтобы сообщить компьютеру, где объект Serversocket прислушивается к подключению клиента. */ * Сторона сервера получает запросы подключения клиента непрерывно, поэтому программирование на стороне сервера, как правило, является мертвой петлей и работает бесконечно. */ while (true) {socket s = s.accept (); /*Вызовите метод Accept () на стороне сервера, чтобы принять объект подключения клиента. Метод Accept () является методом блокировки. Я глупо ждал, применяет ли клиент к подключению. Затем сокет сокета на стороне сервера устанавливает соединение с гнездом на клиенте. * / /* Может ли клиент подключиться к стороне сервера, зависит от того, принимает ли сторона сервера запрос подключения клиента. Если клиент принимает запрос на подключение, установите сокет сокета на стороне сервера, чтобы установить соединение с клиентом через этот розетка и общаться друг с другом. */ System.out.println ("клиент подключен!"); /* Используйте поток InputStream для получения информации, отправленной от клиента, и используйте потоки данных DataInputStream для обработки полученной информации*/ dataInputStream dis = new DataInputStream (S.GetInputStream ()); /* Использовать readutf (метод считывает всю полученную информацию и хранит ее в переменной STR для чтения метода readutf () также является методом блокировки. Он глупо подождать, пока клиент отправит информацию, а затем читает полученную информацию. Если клиент не пишет, он будет глупо ждать на стороне сервера, пока клиент не пишет. Серверная программа заблокирована, так что другой клиент не может подключиться, потому что, если другой клиент хочет подключиться к серверу, он должен вызвать метод Accement () на стороне сервера, метод Accept () должен быть вызван в следующем цикле. Способствуйте прочтению информации. Клиентский розетка
Импорт java.net.*; импортировать java.io.*; public class testclientsocket {public static void main (string args []) бросает исключение {socket s = new Socket ("127.0.0.1", 6666); /*Клиент применяется к подключению к стороне сервера* / /*После подключения к стороне сервера вы можете вывести информацию на сторону сервера и получить информацию, возвращаемую со стороны сервера, и получать информацию о выводе информации и получать информацию о возврате. Как ввод, так и принцип вывода потока должны использоваться для обработки информации*//*Вот выходная информация выходного потока выходного потока на стороне сервера*/ outputStream OS = S.GetOutputStream (); DataOutputStream dos = new DataOutputStream (OS); Thread.sleep (30000);/*Клиент спит в течение 30 секунд, прежде чем отправлять информацию на сервер*/ dos.writeutf ("Привет сервер!"); }}Клиент запрашивает соединение с сервером через порт 6666. После того, как сервер принимает запрос на подключение клиента, он устанавливает сокет на сервере, а затем подключает этот сокет с сокетом клиента, чтобы сервер мог общаться с клиентом. Когда другой клиент подает заявку на подключение, после того, как сервер принимает его, будет установлен еще один розетка для подключения к сокету клиента.