Skip to content

소켓 통신

Im Sejin edited this page Mar 14, 2019 · 4 revisions

서버 사이드

package practice.network;

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

public class ServerClass {

	public static void main(String[] args) throws Exception{
		ServerSocket ss = null;
		Socket s = null;
		
		PrintWriter pw = null;
		BufferedReader br = null;
		
		ss = new ServerSocket(9000);
		System.out.println(" -- ready to be connected with client -- ");
		
		s = ss.accept();	// 해당 포트로 소켓이 연결되기까지 계속 대기한다
		System.out.println(" -- success to be connected with client -- ");
		System.out.println("socket: " + s);
		
		// 소켓 인스턴스에서 OutputStream 객체를 받아 PrintWriter 인스턴스를 생성한다
		pw = new PrintWriter(s.getOutputStream());
		// 소켓 인스턴스에서 InputStream 객체를 받아 BufferedReader 인스턴스를 생성한다
		br = new BufferedReader(new InputStreamReader(s.getInputStream()));
		
		while (true) {
			String msg = br.readLine();
			System.out.println("msg: " + msg);
			
			if(msg.equals("stop")) {
				System.out.println(" -- the client stops the dialogue -- ");
				break;
			}

			pw.println(" -- success to send the message to client -- ");
			pw.flush();	// stream 내 data를 강제로 내보내는 메소드, 소켓통신 시 필수
		}
		
		ss.close();
	}

}

new BufferedReader(new InputStreamReader(s.getInputStream()));
BufferedReader의 constructor로 바로 InputStream 객체를 받을 수 없기에
InputStreamReader의 constructor로 InputStream 객체를 받고,
비로소 InputStreamReader 인스턴스를 BufferedReader의 constructor로 받는다


클라이언트 사이드

package practice.network;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

public class ClientClass {

	public static void main(String[] args) throws Exception {
		Socket s = null;
		
		PrintWriter pw = null;
		BufferedReader br = null;
		
		Scanner scan = null;
		
		s = new Socket("127.0.0.1", 9000);	// ServerSocket이 생성한 포트와 동일해야 한다
		System.out.println(" -- ready to be connected with server -- ");
		
		pw = new PrintWriter(s.getOutputStream());
		br = new BufferedReader(new InputStreamReader(s.getInputStream()));
		
		scan = new Scanner(System.in);
		
		while (true) {
			System.out.println(" -- input the message -- ");
			String msg_to = scan.nextLine();
			pw.println(msg_to);
			pw.flush();
			
			if(msg_to.equals("stop")) {
				System.out.println(" -- success to be disconnected with server -- ");
				break;
			}

			String msg_from = br.readLine();
			System.out.println("msg: " + msg_from);
		}
		
		scan.close();
		s.close();
	}

}

new Scanner(System.in);
System.in은 InputStream의 정적 인스턴스로
new BufferedReader(new InputStreamReader(System.in));
이런 식으로 사용할 수도 있다.

프로그래머 역사

2016.12.

  • HTML을 배우다
  • SQL을 접하다

2017.2.

  • CSS를 접하다
  • JSP를 접하다

2017.7.

  • PHP를 접하다

2017.9.

  • Java를 접하다
  • SQL을 배우다

2018.4.

  • ASP를 접하다
  • Java를 배우다

2018.12.

  • 대학(컴퓨터공학전공) 입시 불합격

2019.2.

  • Java를 공부하다
Clone this wiki locally