본문 바로가기
개발 이야기/자바

[JAVA] TCP소켓통신 echo 서버

by 런던살자 2019. 7. 3.

안녕하세요 마블랑입니다. 

 

자바에서 활용가능한 TCP 소켓통신을 구현하였습니다.

 

이전에 포스팅했던 C와 C#과 같은 기능을 하는 샘플프로그램이지만 자바로 구현을 했습니다.

 

 

 

샘플 프로그램을 먼저 살펴보겠습니다.

 

다른 에코서버와 마찬가지로 클라이언트에서 데이터를 입력하면 서버는 데이터를 표시하고 데이터를 다시 리턴하여 줍니다. 

 

그리고 종료를 원하면 exit를 입력하면 됩니다.

 

 

다음은 샘플코드를 살펴보겠습니다.

 

1. Server

package mainPac;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class main {

	public static void main(String[] args) {
		ServerSocket mServerSocket;
		Socket mSocket;

		BufferedReader brRecv; // Recv
		PrintWriter pwSend; // Send

		try {
			mServerSocket = new ServerSocket(7778); // Server Open
			System.out.println("Java Server Start!!!");

			mSocket = mServerSocket.accept();
			System.out.println("Client Connected");
			
			brRecv = new BufferedReader(new InputStreamReader(mSocket.getInputStream()));
			pwSend = new PrintWriter(mSocket.getOutputStream());
			while (true) {
				String strRecvMsg = brRecv.readLine();		//클라이언트 메시지 수신
				System.out.println(strRecvMsg);

				if (strRecvMsg.equals("exit")) {
					break;
				}

				// 클라이언트에 문자열 전송
				pwSend.println(strRecvMsg);		//메시지 echo
				pwSend.flush();
			}
			mSocket.close();
			mServerSocket.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

 

 

2. Client

package mainPac;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class main {

	public static void main(String[] args) {
		String ip = "127.0.0.1";
		int port = 7778;

		Socket mSocket;

		BufferedReader brRecv;				//Recv
		PrintWriter pwSend;					//Send
		BufferedReader brConsoleInput; 		//Console Input
		try {
			mSocket = new Socket(ip, port);// 소켓 생성후 서버 연결
			
			System.out.println("Connect Success");

			brRecv = new BufferedReader(new InputStreamReader(mSocket.getInputStream()));
			pwSend = new PrintWriter(mSocket.getOutputStream());
			brConsoleInput= new BufferedReader(new InputStreamReader(System.in));
			
			while (true) {
				String s = brConsoleInput.readLine();		//콘솔 입력
				pwSend.println(s);
				pwSend.flush();
				if (s.equals("exit")) {						//exit 입력시 종료
					break;
				}
				System.out.println(brRecv.readLine());		//echo 메시지 수신
			}

			mSocket.close();	// 소켓 닫기 (연결 끊기)

		} catch (IOException e) {
			System.out.println(e.getMessage());
		} 
	}

}

 

클라이언트의 경우 콘솔입력을 해줘야하기때문에 BufferedReader를 하나더 추가하였습니다.

 

C와 다르게 자바에서도 bind나 listen 과정이 모두 감춰져서 처리가 되서 편하군요

 

다른 포스팅과 마찬가지로 코드에 대한 어려운부분은 없는듯하지만 궁금한 사항이 있으면 댓글로 남겨주세요 ^^

 

 

이상 마블랑이었습니다.

 

읽어주어서 고맙습니다.

 

 

 

댓글