【问题标题】:Why I cannot use my DataOutputStream Twice?为什么我不能两次使用我的 DataOutputStream?
【发布时间】:2021-03-21 10:11:31
【问题描述】:

我已尝试向我的服务器发送消息两次,但始终出错。我想知道我应该怎么做才能使这件事起作用。我在这一行“msgToServer.witeBytes("GETACCESS"+jTextFieldUsername.getText()+" "+jTextFieldPassword.getText()+"\n")" 一直有错误。

客户:

try {
        s = new Socket("localhost", 6000);

        Socket incoming;
        incoming = s;
     
        msgFromServer = new BufferedReader(new InputStreamReader(incoming.getInputStream()));
        msgToServer = new DataOutputStream(incoming.getOutputStream());

        msgToServer.writeBytes("LOGIN "+jTextFieldUsername.getText()+" "+jTextFieldPassword.getText()+"\n");
        
        String result;
        result = msgFromServer.readLine();

        if(result.equals("TRUE")){
            JOptionPane.showMessageDialog(null,"Client Access is granted");
        }
        else if(result.equals("False")){
            JOptionPane.showConfirmDialog(this, "Client Access is not granted");
        }
        msgToServer.writeBytes("GETACCESS"+ jTextFieldUsername.getText() + " "+ jTextFieldPassword.getText() + "\n");
        String h1;
        h1 = msgFromServer.readLine();
        JOptionPane.showConfirmDialog(this, "hl: "+h1);
        if(h1.equals("Teacher")){
            
            refreshTable(2);
            JOptionPane.showConfirmDialog(this, "You were granted as a lecturer");
        }
        else if(h1.equals("Student")){
            refreshTable(1);
            JOptionPane.showConfirmDialog(this, "You were granted as a student");
        }

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

我的错误:

java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:210)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
at java.io.InputStreamReader.read(InputStreamReader.java:184)
at java.io.BufferedReader.fill(BufferedReader.java:161)
at java.io.BufferedReader.readLine(BufferedReader.java:324)
at java.io.BufferedReader.readLine(BufferedReader.java:389)

//....

【问题讨论】:

  • 如果您不告诉我们您遇到了什么错误,我们将无能为力。

标签: java tcp client tcpclient dataoutputstream


【解决方案1】:

服务器阻塞直到客户端连接到它,然后再次阻塞以监听来自客户端的消息,在单个消息之后,它关闭连接,因为代码没有处理连续性。要保持持续的通信活跃,您需要执行 read, write like

            String inputLine;
            while ((inputLine = msgFromServer.readLine()) != null) {
                if (".".equals(inputLine)) {
                    out.println("bye");
                    break;
                }
                msgToServer.writeBytes("GETACCESS"+ jTextFieldUsername.getText() + " "+ jTextFieldPassword.getText() + "\n");
            }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-25
    • 1970-01-01
    • 2017-06-13
    • 1970-01-01
    • 1970-01-01
    • 2013-10-25
    • 2018-05-18
    • 1970-01-01
    相关资源
    最近更新 更多