JAVA
서버-클라이언트 채팅 예제
merryna
2021. 7. 22. 13:50
반응형
import java.io.*;
import java.net.*;
import java.util.*;
public class ServerEx {
public static void main(String[] args) {
BufferedReader in = null;
BufferedWriter out = null;
ServerSocket listener = null;
Socket socket = null;
Scanner scanner = new Scanner(System.in); // 키보드에서 읽을 scanner 객체 생성
try {
listener = new ServerSocket(9999);
System.out.println("연결을 기다리고 있습니다...");
socket = listener.accept();
System.out.println("연결되었습니다.");
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
while (true) {
String inputMessage = in.readLine();
if (inputMessage.equalsIgnoreCase("bye")){
System.out.println("클라이언트에서 bye로 연결을 종료하였음");
break;
}
System.out.println("클라이언트 : " + inputMessage);
System.out.println("보내기>>");
String outputMessage = scanner.nextLine();
out.write(outputMessage + "/n");
out.flush();
}
} catch (IOException e) {
System.out.println(e.getMessage());
} finally {
try {
scanner.close(); // scanner 닫기
socket.close(); // 통신용 소켓 닫기
listener.close(); // 서버 소켓 닫기
} catch (IOException e) {
System.out.println("클라이언트와 채팅 중 오류가 발생하였습니다.");
}
}
}
}
import java.io.*;
import java.net.*;
import java.util.*;
public class ClientEx {
public static void main(String[] args) {
BufferedReader in = null;
BufferedWriter out = null;
Socket socket = null;
Scanner scanner = new Scanner(System.in); // Ű키보드에서 읽을 scanner 객체 생성
try {
socket = new Socket("localhost", 9999); // Ŭ클라이언트 소캣 생성, 서버에 연결
in = new BufferedReader(new InputStreamReader(socket.getInputStream())); // 소켓 입력 스트림
out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); // 소켓 출력 스트림
while (true) {
System.out.print("보내기>>"); // 프롬포트
String outputMessage = scanner.nextLine(); // Ű키보드에서 한 행 읽기
if (outputMessage.equalsIgnoreCase("bye")) {
out.write(outputMessage+"\n"); // "bye" 문자열 전송
out.flush();
break; // 사용자가 "bye"를 입력한 경우 서버로 전송 후 실행 종료
}
out.write(outputMessage + "\n"); // Ű키보드에서 읽은 문자열 전송
out.flush(); // out의 스트림 버퍼에 있는 모든 문자열 전송
String inputMessage = in.readLine(); // 서버로부터 한행 수신
System.out.println("서버 : " + inputMessage); // 서버로부터 받은 메시지를 화면에 출력
}
} catch (IOException e) {
System.out.println(e.getMessage());
} finally {
try {
scanner.close();
if(socket != null) socket.close(); // 크라이언트 소켓 닫기
} catch (IOException e) {
System.out.println("서버와 채팅 중 오류가 발생했습니다.");
}
}
}
}
반응형