서버에 저장된 학생의 이름과 점수 데이터를 클라이언트로 접속하여 검색하는 프로그램이다.
○ 학생 이름과 학점이 저장된 텍스트 파일을 미리 마련해두고, 서버는 이 파일을 읽는다.
○ 클라이언트가 학생 이름을 검색하면 서버는 해당 학생의 학점을 찾아 전송한다. 만약 이름이 존재하지 않는다면 '성적 없는 이름'을 전송한다.
○ 한번에 여러 클라이언트가 서버에 접속할 수 있다.
○ 서버에 클라이언트들의 접속과 검색 기록이 출력된다.
코드
서버
import java.io.*;
import java.net.*;
import java.util.*;
import javax.swing.*;
import java.awt.*;
public class fiveServer extends JFrame{
private JTextArea ja=new JTextArea();
private HashMap<String,String> h=new HashMap<String,String>();
private Socket socket=null;
private ServerSocket listener=null;
public fiveServer() {
setTitle("점수 조회 서버");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fileRead("score.txt");
ja.setFont(new Font("Plain",Font.BOLD,15));
add(ja);
setSize(300,300);
setLocation(880,420);
setVisible(true);
try {
listener=new ServerSocket(9999);
while(true) {
socket=listener.accept();
ja.append("\n클라이언트 연결됨");
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("오류 발생");
}
}
}
public void fileRead(String file) {
try {
File file1=new File(file);
BufferedReader bf=new BufferedReader(new InputStreamReader(new FileInputStream(file1),"UTF8"));
String line="";
while((line=bf.readLine())!=null) {
Scanner sc=new Scanner(line);
h.put(sc.next(), sc.next());
sc.close();
}
}catch(IOException e) {System.out.println("파일 없음");};
ja.append("score.txt 읽기 완료");
}
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();
if(h.containsKey(inputMessage)) {
ja.append("\n"+inputMessage+":"+h.get(inputMessage));
out.write(h.get(inputMessage)+"\n");
out.flush();
System.out.println("전송");
}
else {
ja.append("\n"+inputMessage+" 없음");
out.write("성적 없는 이름\n");
out.flush();
}
}
}catch(IOException e) {System.out.println(e.getMessage());}
}
}
public static void main(String[]args) {
new fiveServer();
}
}
클라이언트
import java.io.*;
import java.net.*;
import java.util.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class fiveClient extends JFrame{
private JTextField jt=new JTextField(10);
private JLabel label=new JLabel();
private Socket socket=null;
public fiveClient() {
setLayout(new FlowLayout());
add(new JLabel("이름 입력"));
add(jt);
add(label);
try {
socket=new Socket("localhost",9999);
}catch(IOException e) {
System.out.println(e.getMessage());}
jt.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(jt.getText()+"\n");
out.flush();
String result=in.readLine();
label.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 fiveClient();
}
}
'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 |