mojo's Blog

Server-Client Chatting Program 만들기 본문

Java

Server-Client Chatting Program 만들기

_mojo_ 2021. 8. 23. 15:16

다음과 같은 기능을 하는 채팅 프로그램을 만들어 보려고 한다.

 

  • 서버와 클라이언트가 1:1로 채팅한다.
  • 클라이언트와 서버가 서로 한번씩 번갈아 가면서 문자열 전송 및 수신한다. 클라이언트가 먼저 문자열을 보내면, 서버가 받아 출력하고 서버가 다시 문자열을 보내는 식이다.
  • 서버나 클라이언트는 사용자로부터 문자열을 입력받아 보낸다. 이때 문자열 끝에 "\n" 을 덧붙여서 보내고 받는 쪽에서는 라인 단위로 수신한다.
  • 클라이언트가 "bye" 를 입력하면 서버와 클라이언트가 모두 종료한다.

 

클라이언트의 소켓을 생성하는 코드에 대해 알아보도록 한다.서버와 클라이언트를 동일한 컴퓨터에서 실행해보고자 한다. 그러므로 클라이언트에서 소켓을 생성할 때, 다음과 같이 서버의 IP 주소 부분을 localhost (자신의 IP 주소 : 127.0.0.1)로 하면 된다.서버가 다른 컴퓨터라면 서버의 IP 주소를 주어야 한다.

 

socket = new Socket("localhost", 9999);

 

서버-클라이언트 채팅하기 전에 세팅해야 할 것들...

 

1. 실행하고자 할 클래스를 우클릭 후 Properties => Location 에서 ~~~~\클래스 명.java 에서 ~~~~ 를 복사한다.

 

2. 명령 프롬프트에서 복사한 것을 그대로 cd ~~~~ 로 이동한다.

 

3. javac 클래스 명.java 를 입력한다. (에러가 나는 경우는 뒤에 -encoding UTF-8 를 추가로 붙임)

 

4. 현재 Location 이 ~~~\패키지 명 인 경우에 src로 이동하도록 상위 디렉토리로 이동하도록 cd .. 를 한다.

 

5. java 패키지 명.클래스 명 을 입력하면 실행된다.

 

Server code

package Part15;

import java.io.*;
import java.util.*;
import java.net.*;

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);
		
		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("Client 에서 bye로 연결을 종료하였음");
					break;
				}
				System.out.println("클라이언트 : "+inputMessage);
				System.out.print("보내기 >> ");
				String outputMessage = scanner.nextLine();
				out.write(outputMessage+"\n");
				out.flush();
			}
		} catch(IOException e) {
			System.out.println(e.getMessage());
		}
		finally {
			try {
				scanner.close();
				socket.close();
				listener.close();
			} catch(IOException e) {
				System.out.println("클라이언트와 채팅 중 오류가 발생했습니다.");
			}
		}
	}
	
}

 

Client code

 

package Part15;

import java.io.*;
import java.util.*;
import java.net.*;

public class ClientEx {

	public static void main(String[] args) {
		BufferedReader in = null;
		BufferedWriter out = null;
		Socket socket = null;
		Scanner scanner = new Scanner(System.in);
		
		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");
					out.flush();
					break;
				}
				out.write(outputMessage+"\n");
				out.flush();
				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("클라이언트와 채팅 중 오류가 발생했습니다.");
			}
		}
	}
	
}

 

 

'Java' 카테고리의 다른 글

명품 JAVA Programming 제 15장 Open Challenge  (0) 2021.08.23
수식 계산 Server-Client 만들기  (0) 2021.08.23
Socket Programming  (0) 2021.08.23
네트워크 TCP/IP  (0) 2021.08.23
명품 JAVA Programming 제 14장 실습문제 (4, 6번)  (0) 2021.08.18
Comments