

1.서버 생성
2.클라이언트 생성
3.클 -> 서버 (메세지를 지속적으로 전송)
4.서버 → 클 (메세지를 지속적으로 전송)
서버 클라이언트 순서 할 거 없이 본인들이 먼저 데이터를 보내고 싶을 때 보내는 것
예제
package ex17.multi;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
public class Clienet {
    public static void main(String[] args) {
        try {
            //1. 소켓과 버퍼 만들기
            Socket socket = new Socket("192.168.0.43",20000);
            Scanner sc = new Scanner(System.in);
            PrintWriter pw = new PrintWriter(socket.getOutputStream(),true);
            BufferedReader br = new BufferedReader(
                    new InputStreamReader(socket.getInputStream())
            );
            //2. 메세지 전송 스레드
            new Thread(() -> {
                while (true){
                    String a = sc.nextLine();
                    pw.println(a);
                }
            }).start();
            //3. 메시지 읽기 스레드
            new Thread(() -> {
                while (true) {
                    String requestMsg = null;
                    try {
                        requestMsg = br.readLine();
                        System.out.println("서버로부터 받은 메시지 : " + requestMsg);
                    } catch (IOException e) {
                        throw new RuntimeException(e);
                    }
                }
            }).start();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}package ex17.multi;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.charset.Charset;
import java.util.Scanner;
//동기적 실행
public class Server {
    public static void main(String[] args) {
        try {
            //1. 소켓과 버퍼 만들기
            ServerSocket serverSocket = new ServerSocket(20000);
            Socket socket = serverSocket.accept();
            // 소켓 연결 완료됨
            Scanner sc = new Scanner(System.in);
            // 버퍼 만들기 (recevied)
            BufferedReader br = new BufferedReader(
                    new InputStreamReader(socket.getInputStream())
            );
            //버퍼 만들기 (sand)
            PrintWriter pw = new PrintWriter(socket.getOutputStream(),true);
            //메세지 받기 스레드
            new Thread(() -> {
                while (true) {
                    String requestMsg = null;
                    try {
                        requestMsg = br.readLine();
                        System.out.println("클라이언트로부터 받은 메시지 : " + requestMsg);
                    } catch (IOException e) {
                        throw new RuntimeException(e);
                    }
            }
            }).start();
            // 메세지 보내기 스레드
            new Thread(() -> {
                while (true){
                    String a = sc.nextLine();
                    pw.println(a);
                }
            }).start();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}Share article