DataInputStream readUTF сбой программы - PullRequest
0 голосов
/ 29 мая 2020

У меня вопрос, я пытаюсь отправить карту, используя сокет, как показано ниже

 while(scanning){
        try {
            clientSocket = new Socket(HOST, PORT);
            dataInput = new DataInputStream(clientSocket.getInputStream());
            dataOutput = new DataOutputStream(clientSocket.getOutputStream());
            System.out.println("Connected to server");
            receiverThread = new ReceiverThread(clientSocket, dataInput, dataOutput);
            receiverThread.start();
            scanning = false;
            Map<String, String> jsonMap = new HashMap<String,String>();
            jsonMap.put("UserName", "TestName");
            jsonMap.put("FileName", "TestFileName.txt");
            jsonMap.put("FileSize", "1234");

            //sending file
            File f = new File("test.txt");
            System.out.println("F length"+ f.length());
            dataOutput.writeByte(1);
            dataOutput.writeUTF(String.valueOf(jsonMap));
            dataOutput.writeByte(2);
            dataOutput.write(Integer.parseInt(String.valueOf(f.length())));
            //sendFile(f.getAbsolutePath(),f.length(), receiverThread.getDataOutputStream());
            //end sending

        } catch (ConnectException e) {
            System.out.println("Server not available");
        } catch (SocketException e) {
            System.out.println("Connection broken");
        } catch (Exception e) {
            System.out.println("ERROR " + e);
        } finally {
            if (receiverThread != null)
                try {
                    receiverThread.interrupt();
                } catch (Exception e) {
                }
        }

, и получаю вот так

while (true) {
        try {
            messageType = dataInput.readByte();
            switch (messageType){
                case 1:
                    System.out.println("TEST  " + dataInput.readUTF());
                    message = dataInput.readUTF();
                    System.out.println("TTTT " + message);
                    stringToMap(message);
                    System.out.println("TEST MAP UN1 ");
                    System.out.println("TEST  map " + map.get("UserName"));
                    System.out.println("TEST MAP UN2 ");
                    break;
                case 2:
                    saveFile(clientSocket);
                    break;
                default:
                    throw new IllegalStateException("Unexpected value: " + messageType);
            }
            System.out.println("TEST MESSAGE ");
        } catch (Exception e) {
            System.out.println("ERROR " + Arrays.toString(e.getStackTrace()));
            System.out.println("ERROR " + e.getMessage());
            System.exit(2);
        }

и когда я делаю это:

System.out.println("TEST  " + dataInput.readUTF());

Это работает, но когда я пытаюсь назначить программу переменной String, ничего не делаю, она не вылетает, не выдает ошибку, просто остановитесь на System.out.println ...

кто-то есть идеи почему?

...