Не получать все сообщения через TCP в Java? - PullRequest
1 голос
/ 31 марта 2010

У меня есть TCP-сокет, отправляющий три строки, подобные этой

        out2.println("message1\n");
        out2.println("message2\n");
        out2.println("message3\n");

и другой сокет tco, получающий и отображающий эти сообщения, как это

        System.out.println(in.readLine());
        System.out.println(in.readLine());
        System.out.println(in.readLine());

но только первое сообщение принимается и отображается, все, что я отправляю после этого, нет.

изменить: вот код

    private void buttonActionPerformed(java.awt.event.ActionEvent evt) {                                       
    try {
        // TODO add your handling code here:
        String ipAddress = ipTextArea.getText();
        sourceSocket = new Socket(ipAddress,32323);
        out = new PrintWriter(sourceSocket.getOutputStream(), true);
        in = new BufferedReader(new InputStreamReader(sourceSocket.getInputStream()));
        System.out.println(in.readLine());
        System.out.println(in.readLine());
        System.out.println(in.readLine());
    } catch (UnknownHostException ex) {
        Logger.getLogger(DESWashView.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IOException ex) {
        Logger.getLogger(DESWashView.class.getName()).log(Level.SEVERE, null, ex);
    }


}       

cWashStations также вызывается из события кнопки:

public void cWashStations(){
Thread washThread = new Thread(){
    @Override
    public void run(){
        try {
            sSocket2 = new ServerSocket(32323);
            Thread stationThread = new Thread(){
                @Override
                public void run(){
                    try {
                        washSocket = sSocket2.accept();
                        out2 = new PrintWriter(washSocket.getOutputStream(), true);
                        in2 = new BufferedReader(new InputStreamReader(washSocket.getInputStream()));
                        out2.println("hello from attendant3423\n\n");
                        out2.flush();
                        out2.println("hello from attendant3423\n\n");
                        out2.println("1");
                        while(running){
                            }
                        } catch (IOException ex) {
                            Logger.getLogger(DESAttendantView.class.getName()).log(Level.SEVERE, null, ex);
                        }
                    }
                 };
                 stationThread.start();

            } catch (IOException ex) {
                Logger.getLogger(DESAttendantView.class.getName()).log(Level.SEVERE, null, ex);
            }

        }
    };
    washThread.start();
}

Ответы [ 5 ]

2 голосов
/ 31 марта 2010

Если вы используете println(), не добавляйте \n в конце строки.

0 голосов
/ 31 марта 2010

Вместо трех System.out.println(in.readLine()) подряд попробуйте сделать это в цикле. У меня такое чувство, что два дополнительных символа \ n, которые вы вводите, читаются как строки.

0 голосов
/ 31 марта 2010

Есть несколько вещей, которые я не понимаю в вашем коде, но я думаю, что вы должны очистить буфер, как только закончите с ним (любая причина, почему вы очищаете после первого сообщения, а не после последнего?) И, возможно, Вы также хотите закрыть соединение в конце?

0 голосов
/ 31 марта 2010

Звоните out2.flush() в stationThread

0 голосов
/ 31 марта 2010

Звучит так, будто вы где-то буферизуете. Либо удалите буфер для тестирования, либо очистите буфер.

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