无法从服务器获得答案

时间:2015-11-30 11:58:57

标签: java sockets serversocket

我在java中使用套接字 serverSocket 制作了一个简单的备份程序,但我的程序运行不正常。

简称:

我有两个类ClientModel和ServerModel,问题是:

  1. ClientModel writeUTF - > ServerModel readUTF //正确接收
  2. ClientModel writeObject - > ServerModel readObject //正确接收
  3. ServerModel正在使用该对象,而ServerModel将通过writeUTF发送true或false
  4. ClientModel正在等待方法readUTF中的字符串,但字符串永远不会出现。
  5. 我的流程出了什么问题?我该如何解决?我在下面发布了一个代码。提前谢谢。

    更长版本

    当用户点击按钮"连接到服务器"在客户端GUI中,然后clientModel通过writeUTF()发送一个字符串,该字符串由服务器正确接收,之后客户端立即通过ObjectOutputStream发送一个服务器正确接收的对象。该对象代表用户(登录名和密码)。我的服务器正在检查该用户是否在服务器中注册,如果是,服务器将通过true发送字符串writeUTF,但ClientModel无法获取该字符串。 看我的代码: ClientModel中的第一个方法

    public boolean autoryzacja() throws IOException {
        boolean wartosc = false;
        OutputStream strumien_wy = gniazdko.getOutputStream(); //socket was created before
        InputStream strumien_we = gniazdko.getInputStream();
        ObjectOutputStream strumien_obiektowy_wy = new ObjectOutputStream(strumien_wy);
        ObjectInputStream strumien_obiektowy_we = new ObjectInputStream(strumien_we);
        strumien_obiektowy_wy.writeUTF("AUTORYZACJA"); // correct
        strumien_obiektowy_wy.writeObject(uzytkownik); // correct
        String wynik = "";
        while(strumien_obiektowy_we.available()>0){ // I never be here 
        wynik = strumien_obiektowy_we.readUTF(); // problem here
        }
        if (wynik.equals("true")) {
            System.out.println("uzytkownik jest zarejstrowany na serwerze");
            wartosc = true;
        }
        return wartosc;
    }
    
    ServerModel中的

    方法

    public void run() {
         lista_uzytkownikow = pobierzUzytkownikow();
        String akcja = null;
        try {
            ObjectInputStream obiektowy_wej = new ObjectInputStream(gniazdko.getInputStream());
            ObjectOutputStream obiektowy_wyj = new ObjectOutputStream(gniazdko.getOutputStream());
            akcja = obiektowy_wej.readUTF(); // correct
            switch (akcja) {
            case "AUTORYZACJA":
                try {
                    Uzytkownik user_temp = (Uzytkownik) obiektowy_wej.readObject(); // corrrect
                    if (znajdzUzytkownika(user_temp)) {
                        obiektowy_wyj.writeUTF("JEST"); // problem here
                        System.out.println("jestem w case autoryzacja");
                    } else {
                        obiektowy_wyj.writeUTF("BRAK");
                    }
                    break;
                } catch (ClassNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            // System.out.println(akcja);
            System.out.println(Thread.currentThread().getId());
            // odbierzPlikWatkowy();
    
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    
    }
    

0 个答案:

没有答案