본문 바로가기

JAVA/개발

[JAVA] 영어 사전 서버 - 클라이언트

서버에서 영어 사전에 단어를 삽입할 수 있고 클라이언트로 서버에 접속하여  영어 단어를 검색할 수 있다. 이 서버에서는 삽입한 단어가 해쉬맵에 저장되기 때문에 서버를 실행할 때마다 사전 목록이 초기화된다. 따라서 파일 입출력을 활용하여 목록을 텍스트 파일로 저장하거나 수정이나 삭제 같은 없는 기능을 추가하는 것도 좋겠다. 한글로 영어를 검색하는 기능은 몇 가지 생각나는 방법은 있지만 다른 요소의 추가 없이 입력 값으로만 판별하려면 꽤나 귀찮을 것 같다.

 

○ 서버에서 사전에 단어를 삽입할 수 있다.

클라이언트가 영어 단어를 검색하면 서버는 해당 단어의 의미을 찾아 전송한다. 만약 존재하지 않는 단어라면 '없음'을 전송한다.

○ 한번에 여러 클라이언트가 서버에 접속할 수 있다.

○ 서버에 단어 삽입 기록과 클라이언트들의 검색 기록이 출력된다.

 

 

코드

 

서버

import java.io.*;
import java.net.*;
import java.util.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class sixServer extends JFrame{
	private JTextArea ja=new JTextArea(8,20);
	private HashMap<String,String> h=new HashMap<String,String>();
	private Socket socket=null;
	private ServerSocket listener=null;
	private JTextField jt1=new JTextField(8);
	private JTextField jt2=new JTextField(8);
	private JButton btn;
	public sixServer() {
		setTitle("Dic Server");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		Container c=getContentPane();
		c.setLayout(new FlowLayout());
		
		JPanel jp1=new JPanel();
		jp1.setLayout(new FlowLayout());
		jp1.add(new JLabel("영어"));
		jp1.add(jt1);
		jp1.add(new JLabel("한글"));
		jp1.add(jt2);
		btn=new JButton("저장");
		c.add(jp1);
		btn.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				ja.append("삽입 ("+jt1.getText()+","+jt2.getText()+")\n");
				h.put(jt1.getText(), jt2.getText());
			}
		});
		c.add(btn);
		
		ja.setBorder(BorderFactory.createLineBorder(Color.black,1));
		c.add(ja);
		
		setSize(300,300);
		setLocation(880,420);
		setVisible(true);
		try {
			listener=new ServerSocket(9999);
			while(true) {
			socket=listener.accept();
			program pro =new program(socket);
			pro.start();
			}
		}catch(IOException e) {
			System.out.println(e.getMessage());
		}finally {
			try {
				socket.close();
				listener.close();
			}catch(IOException e) {
				System.out.println("오류 발생");
			}
		}
	}
	class program extends Thread{
		Socket socket;
		public program(Socket socket) {
			this.socket=socket;
		}
		public void run() {
			try {
			BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
			BufferedWriter out=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
			while(true) {
				String inputMessage=in.readLine();
				ja.append("검색 ("+inputMessage+")\n");
				if(h.containsKey(inputMessage)) {
					out.write(h.get(inputMessage)+"\n");
					out.flush();
				}
				else {
					out.write("없음\n");
					out.flush();
				}			
			}
		}catch(IOException e) {System.out.println(e.getMessage());}
	}
	}
	public static void main(String[]args) {
		new sixServer();
	}
}

 

클라이언트

import java.io.*;
import java.net.*;
import java.util.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class sixClient extends JFrame{
	private JTextField jt1=new JTextField(8);
	private JTextField jt2=new JTextField(8);
	private Socket socket=null;	
	public sixClient() {	
		
		setLayout(new FlowLayout());
		add(new JLabel("영어"));
		add(jt1);
		add(new JLabel("한글"));
		add(jt2);
		JButton btn=new JButton("찾기");
		add(btn);
		
		try {
			socket=new Socket("localhost",9999);
		}catch(IOException e) {
			System.out.println(e.getMessage());}
		btn.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				try {
					BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
					BufferedWriter out=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
					out.write(jt1.getText()+"\n");
					out.flush();
					String result=in.readLine();
					jt2.setText(result);
				}catch(IOException e1) {System.out.println(e1.getMessage());}
			}		
		});
		setTitle("클라이언트");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLocation(1080,420);
		setSize(400,150);
		setVisible(true);	
	}
	public static void main(String[]args) {
		new sixClient();
	}
}

'JAVA > 개발' 카테고리의 다른 글

[JAVA] 이미지 파일 전송 서버 - 클라이언트  (0) 2023.02.22
[JAVA] 점수 조회 서버 - 클라이언트  (0) 2023.02.22
[JAVA] 오디오 플레이어  (0) 2023.02.21
[JAVA] 산성비 게임  (0) 2023.02.18
[JAVA] 슬롯 머신  (0) 2023.02.17