자바 I/O & NIO 네트워크 정리 8: TCP 프로그래밍

0

1. 🍕 TCP 프로그래밍

TCP는 스트림 통신 프로토콜이라고도 부르며, 양쪽의 소켓이 연결된 상태인 연결지향 프로토콜이다.

TCP 프로그래밍에서 가장 중요한 클래스는 java.net.ServerSocket과 java.net.Socket이다.
ServerSocket은 서버쪽에서 클라이언트의 접속을 대기하기 위해 반드시 필요한 클래스며,
Socket은 서버와 클라이언트가 통신하기 위해서 반드시 필요한 클래스다.

TCP방법을 이용해서 클라이언트와 서버가 통신하려면 양쪽에 Socket 객체가 있어야 한다.

1. 클라이언트의 접속 대기

ServerSocket server = new ServerSocket(10001);
Socket sock = server.accept();

무엇인가 대기하기 위해서 멈춰있는 메소드를 블로킹 메소드라고 한다.

2. 클라이언트 접속

클라이언트에서 Socket만 생성하면 내부적으로 알아서 접속이 일어나게 된다.
클라이언트에서 Socket객체가 성공적으로 생성되면, accept메소드는 Socket객체를 반환한다.

 ServerSocket server = new ServerSocket("127.0.0.1", 1993);

3. Socket으로부터 InputStream과 OutputStream 구하기

소켓의 OutputStream을 통해서 전송할 수 있고 , 반대로 inputStream을 통해서 전송한 스트림을 읽을수 있다.

만약 계속 한쪽은 읽기만 하고, 한쪽은 쓰기만 한다면 서버와 클라이언트가 멈출수도 있다.

4. 접속끊기

소켓을 종료하고 싶다면 close()를 이용하면 된다.

 sock.close();

2. 🍠 에코 서버 프로그래밍

public static void main(String[] args){
서버 소켓 생성
ServerSocket server = new ServerSocket(xxxx);

accept() 메소드 실행해 클라이언트 접속 대기
Socket sock = server.accept();

아웃풋 스트림과 인풋스트림을 구한다.

OutputStream out = sock.getOutPutStream();
inputStream in = sock.getInputStream();


InputStreamBufferReader 형식으로 변환하고 OutputStreamPrintWriter 형식으로 변환

PrintWriter pw = new PrintWriter(new OutputStreamWriter(out));
BufferedReader br = new BufferedReader((new InputStreamReader(in));

}

3. ☘ 멀티스레드 에코 서버 프로그래밍


serverSocket = new ServerSocket(xxxx);

무한히 반복되는 accept 처리
while(true){
	Socket sock = server.accept();
    EchoThread echoThread = new EchoThread(sock);
    echoThread.start();
}

class EchoThread extends Thread{
	
    public void run(){
    	try{
    	OutputStream out = sock.getOutPutStream();
	inputStream in = sock.getInputStream();
	PrintWriter pw = new PrintWriter(new OutputStreamWriter(out));
	BufferedReader br = new BufferedReader((new InputStreamReader(in));
    
    
    		}catch(Exception){
            		e.printstack
   		 }
    	}
}
profile
쉽게 가르칠수 있도록 노력하자

0개의 댓글