연습: 다중 스레드 TCP 서버 및 클라이언트 만들기

서버 쪽 디렉터리에 월드cup이 있는 것으로 알고 있습니다.txt, 그 형식은 다음과 같다. 2006/이탈리아 2002/브라질... 이 파일은'년도/월드컵 챔피언'방식으로 매년 월드컵 챔피언의 정보를 저장한다. 클라이언트로부터 년도를 입력하고 서버에서 검색하면 개최지로 돌아오고, 반대로'년도 월드컵 개최지로 돌아오지 않는다'고 요구한다.
class Client implements Runnable {
    private Socket s;
    private Scanner sc;
    {
        sc = new Scanner(System.in);
    }
    public void run() {
        s = new Socket();
        try {
            s.connect(new InetSocketAddress("localhost", 8090));
            String year = sc.nextLine();
            s.getOutputStream().write(year.getBytes());
            s.shutdownOutput();
            byte[] bs = new byte[1024];
            int len = s.getInputStream().read(bs);
            s.shutdownInput();
            System.out.println(new String(bs, 0, len));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
class Server implements Runnable {
    private ServerSocket ss;
    private Map map = new HashMap<>();
    {
        try {
            BufferedReader reader = new BufferedReader(new FileReader("worldcup.txt"));
            String line = null;
            while ((line = reader.readLine()) != null) {
                String[] strs = line.split("/");
                map.put(strs[0], strs[1]);
            }
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public void run() {
        try {
            ss = new ServerSocket(8090);
            Socket s = ss.accept();
            byte[] bs = new byte[1024];
            int len = s.getInputStream().read(bs);
            s.shutdownInput();
            String year = new String(bs, 0, len);
            String dest = map.containsKey(year) ? map.get(year) : " ";
            s.getOutputStream().write(dest.getBytes());
            s.shutdownOutput();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

좋은 웹페이지 즐겨찾기