자바 소켓을 이용한 서버-클라이언트 프로그램


클라이언트에서 A라고 입력이 되면 서버에서 C/:내의 파일목록을 보내주는 프로그램을 짜고있습니다.

서버코드입니다.

public class Server {
    public static void main(String[] args) {
        try {
            ServerSocket serverSocket = new ServerSocket(7777);
            while(true) {
            Socket socket = serverSocket.accept();
            BufferedReader si=new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));
            PrintWriter so= new PrintWriter(new OutputStreamWriter(socket.getOutputStream(),"UTF-8"));

            if(si.readLine()=="A"){
                so.println(getDirContent());

            } else {
                so.println(si.readLine());
            }
             so.flush(); si.close(); so.close(); socket.close();
            }
        } catch(Exception e) {}

    }
    private static String getDirContent() {
        File dir=new File("C:/");
        String files[]=dir.list();
        List<String> list=Arrays.asList(files);
        return list.toString();
    }

}

클라이언트 코드입니다.

public class Client {
    public static void main(String[] args) {
        try {
            Socket socket=new Socket("localhost",7777);
            BufferedReader si=new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8"));
            PrintWriter so=new PrintWriter(new OutputStreamWriter(socket.getOutputStream(),"UTF-8"));
            Scanner ki=new Scanner(System.in);
            so.println(ki.nextLine()); so.flush();
            System.out.println(si.readLine());
            si.close(); so.close(); ki.close(); socket.close();
        } catch(Exception e) {
            System.out.println(e.getMessage());
        }
    }

}

실행은 되나 클라이언트에서 입력해도 제대로 결과가 나오지 않습니다. 무엇이 문제일까요??


조회수 71


1 답변


si.readLine()=="A" 이 라인을 "A".equals(si.readLine()) 으로 바꿔주세요.

"A"의 주소값과 si.readLine() 의 주소값이 일치하지 않아서 false 를 리턴했기 때문입니다.

== 연산자는 객체의 주소값을 비교하고, equals() 은 내용을 비교합니다.

참고로 equals 메서드 사용 시 상수를 앞에두어야 null point exception 으로부터 안전합니다.

  • 2016년 11월 21일에 작성됨
    Software Engineer

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close