В этой статье объясняется подробный код программирования сокетов Java для реализации простой службы приветствия для вашей ссылки. Конкретный контент заключается в следующем
Серверная сторона:
Реализуя простейшую службу Hello, распечатайте IP -адрес клиента в консоли, отправьте строку символов (Hello, Java Socket) любому подключенному клиенту и закрыть соединение с клиентом. Подождите, пока запрос на соединение следующего клиента прибудет.
Клиент:
Реализуйте самый простой сокет для подключения к серверу Hello, принимает байтовые данные, отправленные сервером, и печатает контент на консоли.
Ключевые советы:
Поскольку Java обеспечивает много API ввода и потока вывода, многие новички подвергаются программированию сокетов Java, и поскольку им не хватает понимания природы связи сетевых байтов, они напрямую принимают потоки сокетов Byte By Readline (). Однако, поскольку отправляющая сторона не отправляет /r /n, данные не могут быть прочитаны. Это самая распространенная ошибка. Некоторые другие распространенные ошибки включают в себя не инициализацию буфера для принятия, что приводит к искаженным символам и не собирается в соответствии с количеством байтов, полученных в чтении, что привело к исключению из полученных данных. Таким образом, код демонстрирует то, что отправляется байтом и принятием байтом. Это очень важная концепция и принцип в сетевом программировании. Пусть метод входного потока println () и метод вывода readline () перейдет в ад. Дело не в том, что это не просто в использовании, но я предлагаю, чтобы вы не использовали его, потому что они будут препятствовать вашему пониманию и пониманию сущности сетевого программирования. Кроме того, я хотел бы сделать специальное примечание: иногда Flush () не является необходимым, если вы не используете буферный вход и выходной поток для чтения и записи байтов.
Код на стороне сервера:
пакет com.gloomyfish.socket.tutorial.two; импортировать java.io.dataoutputstream; импортировать java.io.ioexception; импортировать java.net.serversocket; импортировать java.net.socket; открытый класс HelloService Extens Thread {Private Serversocket Serversocket; public helloService (int port) бросает ioException {serversocket = new Serversocket (порт); } public void run () {try {while (true) {System.out.println («Ожидание клиента на порте» + serversocket.getlocalport ()); Socket Client = serversocket.accept (); // Заблокировано и ожидание Socket System.out.out.println («только что подключено к» + client.getRemoteSocketAddress ()); DataOutputStream dos = new DataOutputStream (client.getOutputStream ()); byte [] hello = "Привет, сокет Java" .getbytes (); dos.write (привет, 0, привет.length); dos.close (); client.close (); }} catch (Exception e) {e.printstackTrace (); }} public static void main (string [] args) {try {helloService service = new HelloService (9999); Service.Start (); } catch (ioException e) {e.printstackTrace (); }}} Сервер слушает в порте 9999 и ожидает подключения и использует поток Java для достижения запуска на стороне сервера.
Клиентский код заключается в следующем:
пакет com.gloomyfish.socket.tutorial.two; импортировать java.io.datainputstream; импортировать java.io.ioexception; Импорт java.net.inetsocketAddress; Импорт java.net.socketAddress; Импорт java.net.socketAddress; открытый класс helloclient {private int clientnumber; Частный адрес сокетаддресса; public helloclient (int clientnum) {clientNum = clientNum; } public void setupClients (String ServerHostName, int Port) Throws ioException {address = new inetSocketAddress (serverHostName, port); for (int i = 0; i <clientnumber; i ++) {System.out.println (); System.out.println ("Start Client No." + (i + 1)); Сокет сокет = новый сокет (); ocket.connect (адрес); DataInputStream bufferedReader = new DataInputStream (socket.getInputStream ()); byte [] cbuff = новый байт [256]; char [] charbuff = new char [256]; int size = 0; while ((size = BufferedReader.read (CBUFF))> 0) {ConvertByTetoChar (Cbuff, Charbuff, Size); System.out.println (Charbuff); } BufferedReader.Close (); Socket.Close (); }} private void convertbytetochar (byte [] cbuff, char [] charbuff, int size) {for (int i = 0; i <charbuff.length; i ++) {if (i <size) {charbuff [i] = (char) cbuff [i]; } else {charbuff [i] = ''; }}} public static void main (string [] args) {try {helloclient client = new helloclient (10); client.setupclients ("localhost", 9999); } catch (ioException e) {e.printstackTrace (); }}} Запустите 10 клиентов, чтобы подключиться к стороне сервера, и после получения приветствия сервера клиент закрывает соединение.
Специальный совет: обязательно инициализируйте буфер charbuff
Результаты запуска программы:
Выше приведено в этой статье, я надеюсь, что это будет полезно для каждого обучения.