서버는 영어 사전에 단어를 삽입할 수 있고 클라이언트는 서버에 접속하여 영어 단어를 검색할 수 있습니다.
이 서버에서는 삽입된 단어가 해쉬맵에 저장되므로 사전 목록은 서버가 실행될 때마다 초기화된다.
따라서 목록을 텍스트 파일로 저장하거나 존재하지 않는 편집 또는 삭제와 같은 기능을 추가하려면 파일 입/출력을 사용하는 것이 좋습니다.
한글로 영어를 검색하는 방법은 여러 가지가 있는데, 다른 요소를 추가하지 않고 입력값만 결정하면 매우 번거롭습니다.
○ 서버의 사전에 단어를 삽입할 수 있습니다.
○ 클라이언트가 영어 단어를 입력하면 서버는 단어의 의미를 찾아 전송합니다.
단어가 존재하지 않으면 “없음”을 보냅니다.
○ 여러 클라이언트가 동시에 서버에 연결할 수 있습니다.
○ 클라이언트의 단어 삽입 기록 및 검색 기록이 서버에 표시됩니다.
코드
섬기는 사람
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();
}
}