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

조회수 3611회

클라이언트에서 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());
        }
    }

}

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

1 답변

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

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

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

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

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

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)