-
Notifications
You must be signed in to change notification settings - Fork 0
소켓 통신
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));
이런 식으로 사용할 수도 있다.