연습은 실전입니다.
훈련은 전투다!
Server
서버를 하나 만들어 줍시다.
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; public class Server { public static void main(String[] args) { try { ServerSocket serverSocker = new ServerSocket(10000); // 포트번호 : 10000 Socket socket = serverSocker.accept(); // 리스너. Client의 연결을 기다립니다. System.out.println("클라이언트 연결됨."); BufferedReader br = new BufferedReader( new InputStreamReader(socket.getInputStream(), "UTF-8") ); while (true){ String msg = br.readLine(); if (msg == null) break; System.out.println(msg); } String msg = br.readLine(); System.out.println(msg); } catch (IOException e) { throw new RuntimeException(e); } } }
※조금은 중요
accept()
메소드는 Blocking(블로킹)메소드 입니다. 서버 소켓에서 대기하다가, 연결 요청이 있을 때까지 프로그램을 정지시킵니다. 클라이언트 연결 요청이 오면 수락하고 새로운 Socket 객체를 반환합니다. (이론에서 배웠죠?)Client
클라이언트 입니다.
import java.io.BufferedWriter; import java.io.IOException; import java.io.OutputStreamWriter; import java.net.Socket; import java.util.Scanner; public class Client { public static void main(String[] args) { // localhost = 127.0.0.1 -> Loopback try { Socket socket = new Socket ("127.0.0.1", 10000); // ip, port Scanner sc = new Scanner(System.in); String msg = sc.nextLine(); BufferedWriter bw = new BufferedWriter( // 버퍼 만듬 new OutputStreamWriter(socket.getOutputStream(), "UTF-8") // 보조스트림 ); bw.write (msg+"\n"); bw.write (msg); bw.flush(); } catch (IOException e) { System.out.println(e.getMessage()); e.printStackTrace(); } } }
이론에서 마지막에 소개한 Loopback (루프백)입니다. IP주소에 127.0.0.1을 입력하면 컴퓨터 내부. 좀더 나아가 같은 공유기를 사용하는 컴퓨터 내에서 네트워크 통신할 수 있습니다.
틀린 IP주소 넣기
getMessage()
와printStackTrace()
메서드 입니다. 오류를 볼 수 있어요!import java.io.IOException; import java.net.Socket; public class Client { public static void main(String[] args) { // localhost = 127.0.0.1 -> Loopback try { Socket socket = new Socket ("127.0.0.0", 10000); // ip, port } catch (IOException e) { System.out.println(e.getMessage()); e.printStackTrace(); // 틀린거 찾기 } } }
연결을 기다리다 시간이 다 되어 퇴근했답니다.
통신을 할때는 버퍼에 쏨, 소캣으로 내림, 버퍼에 메세지를 쓸 때
한글을 쓸 때 UTF-8로 끊어 읽으라고 알려줘야 한다. 한글은 3byte이기 때문에 깨진다.
Share article