Когда мы хотим подключиться к серверу по сети с использованием TCP/IP в Java, нам нужно создать объект java.net.Socket и подключиться к серверу. Если вы хотите использовать Java NIO, вы также можете создать объект SocketChannel в Java NIO.
Создать сокет
Следующий пример кода подключается к порту 80 на сервере с IP-адресом 78.64.84.171. Этот сервер является нашим веб-сервером (www.VeVB.COm), а порт 80 — портом веб-службы.
Скопируйте код кода следующим образом:
Сокет сокет = новый сокет("78.46.84.171", 80);
Мы также можем использовать доменные имена вместо IP-адресов, как в следующем примере:
Скопируйте код кода следующим образом:
Сокет сокет = новый сокет("VeVB.COm", 80);
Сокет отправляет данные
Чтобы отправить данные через Socket, нам нужно получить выходной поток Socket (OutputStream). Пример кода выглядит следующим образом:
Скопируйте код кода следующим образом:
Сокет сокет = новый сокет("VeVB.COm", 80);
OutputStream out = socket.getOutputStream();
out.write("некоторые данные".getBytes());
out.flush();
выход.закрыть();
сокет.закрыть();
Код очень простой, но если вы хотите отправить данные на сервер через сеть, нужно не забыть вызвать методlush(). Базовая реализация TCP/IP операционной системы сначала помещает данные в больший блок кэша данных, а размер блока кэша адаптируется к размеру пакета TCP/IP. (Примечание переводчика: вызов методаlush() только записывает данные в кеш операционной системы и не гарантирует, что данные будут отправлены немедленно)
Сокет считывает данные
Чтобы прочитать данные из сокета, нам нужно получить входной поток сокета (InputStream). Код выглядит следующим образом:
Скопируйте код кода следующим образом:
Сокет сокет = новый сокет("VeVB.COm", 80);
InputStream in = socket.getInputStream();
данные int = in.read();
//... читать дополнительные данные...
в.закрыть();
сокет.закрыть();
Код не сложный, но следует отметить, что чтение данных из входного потока Сокета не считывает файл. Метод read() вызывается до тех пор, пока не будет возвращено -1, потому что для Сокета только тогда, когда сервер Когда. соединение закрыто, входной поток Socket вернет -1, но на самом деле сервер не продолжает закрывать соединение. Предположим, мы хотим отправить несколько запросов по одному соединению, то закрывать соединение в этом случае было бы глупо.
Следовательно, при чтении данных из входного потока Socket мы должны знать количество читаемых байтов. Этого можно добиться, позволив серверу сообщить данным, сколько байтов было отправлено, или установив специальные символы в конце данных. Реализован метод разметки.
Закрыть сокет
После использования Сокета мы должны закрыть Сокет и отключиться от сервера. Чтобы закрыть Socket, вам нужно всего лишь вызвать метод Socket.close(). Код выглядит следующим образом:
Скопируйте код кода следующим образом:
Сокет сокет = новый сокет("VeVB.COm", 80);
сокет.закрыть();
(Полный текст заканчивается)