@FR34

MulticastChat, почему не происходит постоянное чтение с ip адреса через цикл?

Почти готовый мультикаст чат, не могу понять в чём ошибка, в цикле while прописано постоянное чтение пакетов с адреса чат-комнаты, но он ничего не считывает. Не могу понять, то ли программа не читает в принципе пакеты, или же не отправляет их, потому как второй клиент запущенный на ту же комнату не видит отправленных туда сообщений
Вот злобно-код:
package multicastchat;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;

public class MulticastChat {
    
    int chatRoom = 0;
    int port = 0;
    String ipAdress = "";
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    
    public MulticastChat(){
        
    }
    
    public void choosingChatRoom() throws IOException{
        while (!(chatRoom > 0 && chatRoom < 5)) {
            System.out.println(
                    "We have four chat rooms, choose one of them (1, 2, 3, 4)");
            chatRoom = Integer.valueOf(br.readLine());
            switch (chatRoom) {
                case 1:
                    port = 4441;
                    ipAdress = "230.0.0.1";
                    break;
                case 2:
                    port = 4442;
                    ipAdress = "230.0.0.2";
                    break;
                case 3:
                    port = 4443;
                    ipAdress = "230.0.0.3";
                    break;
                case 4:
                    port = 4444;
                    ipAdress = "230.0.0.4";            
                    break;
                default:
                    System.out.println("Sorry, but we haven't this room, try another room");
                    this.choosingChatRoom();
                    break;
            }
            System.out.println("Welcome to room " + chatRoom);
        }
    }

    public static void main(String[] args) throws IOException {
        MulticastChat mc = new MulticastChat();
        mc.choosingChatRoom();
        MulticastSocket socket = new MulticastSocket(mc.port);
        InetAddress address = InetAddress.getByName(mc.ipAdress);
        socket.joinGroup(address);

        DatagramPacket outMessage;
        DatagramPacket inMessage;

        String userInput;

        while (true) {
            //Приём сообщения
            inMessage = new DatagramPacket(new byte[4096], 4096);
            inMessage.setLength(inMessage.getData().length);
            socket.receive(inMessage);
            String received = new String(
                    inMessage.getData(), 0, inMessage.getLength());
            System.out.println(received);   
            //Отправка сообщения
            if ((userInput = mc.br.readLine()) != null) {
                if (userInput.equals("quit")) {
                    System.out.println("Bye, see you later ^_^");
                    socket.leaveGroup(address);
                    socket.close();
                    System.exit(0);
                } else {
                    byte[] buff = userInput.getBytes();
                    outMessage =
                            new DatagramPacket(buff, buff.length, address, mc.port);
                    socket.send(outMessage);
                }
            }         
        }
    }
}
  • Вопрос задан
  • 210 просмотров
Решения вопроса 1
@FR34 Автор вопроса
Ответ найден пару дней назад
функция br.readLine() как и функция socket.recieve(inMessage) являются блокирущими
Помог запуск на двух разных потоках функции отправки и получения пакета
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
ValorVl
@ValorVl
DevOps
Debuger - это раз
Wireshark - смотреть корректно ли работает IGMP
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы