연습은 실전입니다.
훈련은 전투다!
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