각각 다른 프로젝트로 예제 클래스 2개로 실행
< MainServer.java >
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | package server; import java.io.IOException; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class MainServer { public static void main(String[] args ) { try { /* 클라이언트가 포트 8888연결을 시도하면 accept()는 대기를 풀고, * 클라이언트와 연결시키는 Socket 클래스를 생성하여 반환 * socket변수가 바로 클라이언트랑 1:1 연결된 소켓*/ ServerSocket serverSocket = new ServerSocket(8888); // 포트8888의 서버소켓 생성 Socket socket = serverSocket.accept(); // accept: 클라이언트가 들어오는 것을 대기하는 역할 /* OutputStream 객체에 서버에서 전달할 메세지를 작성 */ OutputStream outputData = socket.getOutputStream(); String sendData = "Welcome to Socket"; outputData.write(sendData.getBytes()); serverSocket.close(); socket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } | cs |
< MainClient.java >
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | package client; import java.net.Socket; import java.io.InputStream; public class MainClient { public static void main (String[] args) { try { Socket socket = new Socket("10.11.11.111", 8888); // Socket 객체를 생성하여 연결 /* 연결이 정상적으로 되었다면 데이터를 스트림형태로 받아와서 출력 */ InputStream inputData = socket.getInputStream(); byte[] receiveBuffer = new byte[100]; inputData.read(receiveBuffer); System.out.println(new String(receiveBuffer)); socket.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } | cs |
1. 서버를 먼저 실행시키면 클라이언트 대기 상태로 들어간다.
2. 클라이언트를 실행시키면 서버와 연결을 시도
3. 서버는 문자열을 클라이언트에게 전달한 후 자신은 종료
4. 클라이언트가 받은 문자열을 출력하고 종료
'DEV > JAVA' 카테고리의 다른 글
[Java] String, StringBuffer, StringBuilder (0) | 2020.02.27 |
---|---|
[java] 람다(Rambda) 기본문법 (0) | 2020.01.23 |
io_5 : 총 13개 클래스 정리 (0) | 2019.10.08 |
id_4 : BufferedInputStream, BufferedOutputStream, BufferedReader, BufferedWriter (0) | 2019.10.08 |
io_3 : ObjectInputStream, ObjectOutputStream , 직렬화 (serialization ) (0) | 2019.10.08 |