java.io.StreamCorruptedException : 유효하지 않은 유형 코드 : 04

앤드류

클라이언트-서버 애플리케이션에 약간의 문제가 있습니다. 2 개 이상의 클라이언트에 연결하여 smth를 보내거나 클라이언트에서 로그 아웃하고 한 번 더 연결하려고하면 예외 : "java.io.StreamCorruptedException : invalid type code : 04"가 발생했습니다.

뭐가 문제 야? 도와 주셔서 감사합니다.

서버 코드 :

class ClientCommunication implements Runnable {
    private Socket incoming;

    public ClientCommunication(Socket clientSocket) {
        incoming = clientSocket;
    }

    public void run() {
        try {
            synchronized (this) {                                       
                    serverObjectOutput = new ObjectOutputStream(
                            incoming.getOutputStream());
                    serverObjectInput = new ObjectInputStream(
                            incoming.getInputStream());                      
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        int operation = -1;
        synchronized(this) {
            while (true) {
                try{                        
                    if(serverObjectInput.available() > 0){
                    operation = serverObjectInput.readInt();

                    switch(operation) {
                    case 1:
                            Employee employee = (Employee) serverObjectInput.readObject();
                            //CHECK LOGGING DATA
                            // SEND RESULT = 1 OR RESULT = -1
                            break;
                }
              }
            } catch(IOException | ClassNotFoundException | SQLException ex)                 
            {   
                ex.printStackTrace();
            }                   
          }
        }           
    }
}


class ServerStart implements Runnable {
    private int portNumber;

    public ServerStart(int portNumber) {
        this.portNumber = portNumber;
    }

    public void run() {

        try {
            conn = getConnection();
            stat = conn.createStatement();

        } catch (SQLException e1) {             
            e1.printStackTrace();
        } catch (IOException e1) {              
            e1.printStackTrace();
        } catch (InterruptedException e) {              
            e.printStackTrace();
        }

        try {
            serverSocket = new ServerSocket(portNumber);        

        } catch (IOException e) {
            e.printStackTrace();                
        }

        try {
            while (true) {
                Socket incoming = serverSocket.accept();

                Runnable r = new ClientCommunication(incoming);
                Thread t = new Thread(r);
                t.start();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

클라이언트 기능 :

            public void actionPerformed(ActionEvent e) {
                if (isConnected == false) {
                    String ServerIP = ip.getText().trim();

                    int ServerPort = Integer
                            .parseInt(port.getText().trim());


                    try {
                        ClientSocket = new Socket(ServerIP, ServerPort);                        

                        clientObjectInput = new ObjectInputStream(
                                ClientSocket.getInputStream());
                        clientObjectOutput = new ObjectOutputStream(
                                ClientSocket.getOutputStream());

                        isConnected = true;
                    } catch (IOException ex) {
                        ex.printStackTrace();
                    }
                    synchronized (this) {
                        try {                               
                            ClientLoginFrame login = new ClientLoginFrame();

                            Employee employee = login.getEmployee();                                                                
                            clientObjectOutput.writeInt(1);
                            clientObjectOutput.flush();
                            clientObjectOutput.writeObject(employee);                               
                            int result = clientObjectInput.readInt();

                            if(result == 1)
                            {                           
                             // DO SMTH
                            }
                            else { 
                                isConnected = false;
                                ClientSocket.close();                                   
                            }                           
                        } catch (IOException ex) {
                            ex.printStackTrace();       
                        }
                    }
                }
            }
        });
피터 로리

나는 당신의 문제가 당신이 싱글 톤 serverInputStreamserverOutputStream연결 사이를 공유하고 있다는 것 입니다. 한 번에 여러 스레드에서 동일한 스트림을 사용하면 스트림이 손상되거나 읽기가 유효하지 않게되는 지점이 둘 이상있을 때까지는 문제가되지 않습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

java.io.StreamCorruptedException : 유효하지 않은 스트림 헤더 : EFBFBDEF

java.io.StreamCorruptedException : 유효하지 않은 스트림 헤더 : 54657374

java.io.StreamCorruptedException : 유효하지 않은 스트림 헤더 : 7371007E

Serialization : java.io.StreamCorruptedException : 유효하지 않은 스트림 헤더 : 0AACED00

Java의 직렬화, 유효하지 않은 유형 코드 00

때 java.io.IOException : 유효하지 않은 상수 유형 : 19 (5)에서

java.io.IOException : 유효하지 않은 헤더 필드는 무엇입니까?

Java 8로 업그레이드하면 unittest java.io.IOException에서 Orika 매퍼가 발생합니다. 유효하지 않은 상수 유형 : 142에서 15

java.lang.IllegalArgumentException : 유효하지 않은 pks [10]-알 수없는 유형 코드 0

Spring-유효하지 않은 인수 값 : java.io.NotSerializableException

유효하지 않은 코드 조각

SQL 상태 [99999]; 오류 코드 [17004]; 잘못된 열 유형입니다. 중첩 된 예외는 java.sql.SQLException : 유효하지 않은 열 유형입니다.

유효하거나 유효하지 않은 바코드

유효하지 않은 json 유형에 대한 fromJson 코드 생성

Gradle 프로젝트를 빌드 할 수 없음 : 유효하지 않은 유형 코드 : Java 11을 사용하는 B3

반사-Java 8-유효하지 않은 상수 유형

Java의 문자열에서 유효하지 않은 유니 코드 문자를 제거하는 방법

MovIeTexture가 유효하지 않은 유형 빌드 오류

Access VBA : 유효하지 않은 필드 데이터 유형

스레드 "main"의 예외 java.lang.IllegalArgumentException : java.io.IOException 유효하지 않은 DER : 길이 필드가 너무 큼 (186)

날짜 형식 오류 java.sql.SQLException : 유효하지 않은 열 유형

SP의 유효한 레코드를 유효한 테이블에 삽입하고 유효하지 않은 레코드를 유효하지 않은 SP에 삽입

안드로이드 3.3.0 업데이트 오류 : 원인 : 유효하지 않은 유형 코드 : 68

java.security.InvalidKeyException : 유효하지 않은 키 형식

Java 유효하지 않은 키 저장소 형식

Java Selenium 유효하지 않은 Xpath 문

java.io.StreamCorruptedException : invalid type code : AC를받지 않고 ObjectInputStream에 추가하는 방법

코드의 Javascript Mustache 유효하지 않은 템플릿

고급 검색-코드 1017 유효하지 않은 where 절 [Backendless]

TOP 리스트

뜨겁다태그

보관