Блокировка Java-сервера - PullRequest
       2

Блокировка Java-сервера

0 голосов
/ 26 марта 2012

У меня есть некоторые проблемы с моим сокетом сервера.Я создаю DatagramSocket для чата между сервером и клиентом.

public static void main (String[] args) throws IOException {

        byte[] send = new byte[1024];
        byte[] receive = new byte[1024];
        BufferedReader entree;
        DatagramSocket serverSocket = null;
        InetAddress ip;
        InetAddress ipDest;
        int port;

        try {
            serverSocket = new DatagramSocket(8888);
        } catch (SocketException e) {
            e.printStackTrace();
        }

        while (true) {
            DatagramPacket recu = new DatagramPacket(receive, receive.length);
            serverSocket.receive(recu);
            String sentence = new String(recu.getData());
            ipDest = recu.getAddress();
            port = recu.getPort();
            System.out.println("Reçu:"+sentence);


            entree = new BufferedReader(new InputStreamReader(System.in));
            String chaine = entree.readLine();
            send = chaine.getBytes();
            DatagramPacket dp = new DatagramPacket(send, send.length, ipDest, port); 
            serverSocket.send(dp);

            send = new byte[1024];
            receive = new byte[1024];
        }

Но я использую new BufferedReader(new InputStreamReader(System.in)) получить следующий материал для отправки, и он блокируется.Поэтому я не могу получить то, что приходит от клиента, и распечатать его.
Как мне это устроить?
Merci, eo

1 Ответ

0 голосов
/ 26 марта 2012

Попытка выполнить неблокирующее чтение на System.in в Java - бесполезное упражнение.Нет переносимого способа сделать это, поэтому Java не поддерживает это.

Даже если вы создадите отдельный поток и выполните там блокирующее чтение, у вас возникнет проблема того, что этот поток будет непрерывным.См .: Java: как прервать чтение потока из System.in

По сути, вам нужно либо использовать библиотеку для конкретной платформы (JNI) ( JCurses для linux, например), или используйте графический интерфейс.

Отредактируйте, чтобы добавить: Что вы можете сделать, это переместить чтение сокета в другой поток, так как это прерывается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...