在Java中没有通过TCP接收所有消息?

时间:2010-03-31 18:12:58

标签: java tcp

我有一个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 个答案:

答案 0 :(得分:2)

如果您使用println(),请不要在字符串末尾添加\n

答案 1 :(得分:0)

听起来你在某处缓冲。删除缓冲区以进行测试或刷新缓冲区。

答案 2 :(得分:0)

out2.flush()

中致电stationThread

答案 3 :(得分:0)

我的代码中有一些我不理解的东西,但我认为你应该在完成后刷新缓冲区(在第一条消息之后而不是在最后一条消息之后刷新的任何原因?)可能你还想在最后关闭连接?

答案 4 :(得分:0)

不是连续三个System.out.println(in.readLine()),而是尝试在循环中完成。我有一种感觉,你输入的额外两个'\ n'被读作线条。