자바 소켓을 이용할 파일 입출력 프로그램을 짜는데요 클라이언트에 readUTF에서 EOFException처리때문에 질문드립니다

조회수 4024회

서버 하나에 여러 클라리언트가 접속해서 채팅을 하는 프로그램에

서버가 option을 입력하면 메뉴가 뜨고 파일전송을 선택하면 파일 경로를 입력한 후 접속자 중 누구에게 보낼지 정한 다음 클라이언트 에게 보내고 클라이언트는 받는데요 파일을.

클라이언트가 Y 또는 y를 입력하면 서버에게 "Please send the File"라는 문자열을 보낸 후 서버가 "파일 전송합니다." 문자열을 보내고 바로 파일을 전송하기 시작하고 이와 동시에 클라이언트에서는 "파일 전송합니다."라는 문자열을 받으면 파일을 받기 시작합니다.

클라이언트는 파일을 정상적으로 다 받는데 마지막에 EOFException을 처리하면서 클라이언트가 접속을 끊어버리고 나가버립니다. 밑에 사진은 클라이언트 입니다.

에러 메시지

코드 입니다.

[AServer.java]

                if(c_s.elementAt(i).name.equals(name))
            {                           
                c_s.elementAt(i).dos.writeUTF("파일 전송합니다.");
                //보내기 로직
                fis = new FileInputStream(filePath);
                bis = new BufferedInputStream(fis);
                int len = 0;
                int size = 4096;
                byte[] data = new byte[size];
                while ((len = bis.read(data, 0, 4096)) != -1) {
                    c_s.elementAt(i).dos.write(data, 0, len);
                    c_s.elementAt(i).dos.flush();
                }
                System.out.println("파일 전송 작업을 완료하였습니다.");
                System.out.println("보낸 파일의 사이즈 : " + sendFile.length());

                c_s.elementAt(i).dos.close();
                bis.close();
                fis.close();
                break;
            }
        }
    }

[AClient]

            else if(msgClient.equals("파일 전송합니다."))
            {       
                pln("전송 받기 시작!");
                fos = new FileOutputStream(f);
                bos = new BufferedOutputStream(fos);

                int len = 0;
                int size = 4096;
                byte[] data = new byte[size];

                while ((len = dis.read(data, 0, 4096)) != -1) {
                    bos.write(data, 0, len);
                    bos.flush();
                } 
                System.out.println("파일 수신 작업을 완료하였습니다.");
                System.out.println("받은 파일의 사이즈 : " + f.length());                   
                bos.close();
                fos.close();
                dis.close();
            }

이미지 이름이나 설명을 여기에 넣어주세요.

  • 코드를 상당히 길게 적어주셨는데요. 문제라고 생각되는 부분을 요약해서 올려주지 않으시면 읽어보실 분이 거의 없을것 같아요. 그리고 코드는 마크다운 문법에 맞춰서 ```와 ```로 감싸서 올려주셔야 잘 나옵니다. 정두식 2016.4.4 12:14

3 답변

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.