(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();
	}
}