Работа с сокетами в Java


Не подскажите, изучаю взаимодействие с сервером на Java и планирую переписать на C++...
Что происходит в куске, представленном ниже?
            soc = new Socket();
            soc.setSoTimeout(6000);
            soc.setTcpNoDelay(true);
            soc.setTrafficClass(18);
            soc.connect(new InetSocketAddress(ip, port), 6000);
            dis = new DataInputStream(soc.getInputStream());
            dos = new DataOutputStream(soc.getOutputStream());
            dos.write(254);

            if (dis.read() != 255) {
                throw new IOException("Bad message");
            }
            String servc = readString(dis, 256);
            servc.substring(3);
            if (servc.substring(0, 1).equalsIgnoreCase("§") && servc.substring(1, 2).equalsIgnoreCase("1")) {
                servtype = 1;
                return servc.split("\u0000");

            } else {
                servtype = 2;
                return servc.split("§");
            }

Наиболее важны и непонятны мне следующий кусочек:

            dis = new DataInputStream(soc.getInputStream());
            dos = new DataOutputStream(soc.getOutputStream());
            dos.write(254);

            if (dis.read() != 255) {
                throw new IOException("Bad message");
            }

Прошу - можете построчно разъяснить - что где и кому отправляется или происходит?

Огромное спасибо!

P.S. С Java неочень близко знаком, а пример взаимодействия указан только на ней, это прошу учесть когда будете минусить)


Ответы (1 шт):

Автор решения: George_A
 // Обертываем поток получения данных в DataInputStream
 dis = new DataInputStream(soc.getInputStream());
 // тоже самое для исходящих
 dos = new DataOutputStream(soc.getOutputStream());
 // Отправляем байт 254
 dos.write(254);

 // ОЖидаем получения чего то начинающегося с байта 255
 if (dis.read() != 255) {
     throw new IOException("Bad message");
 }
→ Ссылка