이전에는 소켓을 이용하여 한 번씩 문자열을 주고받았다면
이제는 스레드를 사용하여 데이터처리를 분산시켜서 시도해 봤어요..
서버 쪽에서 읽어들이는 스트림 - in
서버 쪽에서 보내는 스트림 - out
클라이언트에서 읽어들이는 스트림 - in
클라이언트에서 보내는 스트림 - out
서버와 클라이언트 측에서 읽어들이는 스트림 in 객체를 스레드로 넘겨
스레드에선 문자열을 읽어들여 프린트를 해주고
메인 영역에서는 스캐너로 입력받은 문자열을 쏴주는 역할을 하여
각각 다른 작업을 수행하게 만들었어요
서버 측
클라이언트 측
서버 측 소스코드>>
package d20230508;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
class ServerThread implements Runnable {
BufferedReader in = null;
public ServerThread(BufferedReader in) {
this.in = in;
}
@Override
public void run() {
while (true) {
try {
String msg = in.readLine();
if (msg.equalsIgnoreCase("quit")) {
System.out.println("클라이언트에서 연결을 종료하였음!!");
break;
}
System.out.println("클라이언트 : " + msg);
Thread.sleep(100);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
public class ChatServer {
public static void main(String[] args) {
ServerSocket serversocket = null;
Socket socket = null;
BufferedReader in = null;
PrintWriter out = null;
Scanner sc = new Scanner(System.in);
try {
serversocket = new ServerSocket(5000);
System.out.println("연결을 기다리고 있음..");
socket = serversocket.accept();
System.out.println("연결완료! 여기는 서버입니다.");
out = new PrintWriter(socket.getOutputStream());
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
Thread ct = new Thread(new ServerThread(in));
ct.start();
while (true) {
String omsg = sc.nextLine();
out.write(omsg + "\n");
out.flush();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
serversocket.close();
socket.close();
in.close();
out.close();
sc.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
클라이언트 측 소스코드>>
package d20230508;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
class ClientThread implements Runnable {
BufferedReader in = null;
public ClientThread(BufferedReader in) {
this.in = in;
}
@Override
public void run() {
while (true) {
try {
String msg = in.readLine();
if (msg.equalsIgnoreCase("quit")) {
System.out.println("서버에서 연결을 종료하였음!!");
break;
}
System.out.println("서버:" + msg);
Thread.sleep(100);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
public class ChatClient {
public static void main(String[] args) {
Socket socket = null;
BufferedReader in = null;
PrintWriter out = null;
Scanner sc = new Scanner(System.in);
try {
socket = new Socket("localhost", 5000);
System.out.println("연결완료! 여기는 클라이언트입니다.");
out = new PrintWriter(socket.getOutputStream());
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
Thread ct = new Thread(new ClientThread(in));
ct.start();
while (true) {
String omsg = sc.nextLine();
out.write(omsg + "\n");
out.flush();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
socket.close();
in.close();
out.close();
sc.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
'Java > Basic' 카테고리의 다른 글
JSP+Servlet Ajax 사용하기 (0) | 2025.02.24 |
---|---|
JAVA - Thread 달팽이 경주 게임 (0) | 2025.02.22 |
Java - JDBC 학생관리프로그램 (0) | 2025.02.22 |
Java - JDBC 소코반 게임 (1) | 2025.02.22 |
Java - JDBC CRUD 게시판 만들기 + 로그관리 (1) | 2025.02.22 |