AWS BACK DAY 27. 소켓(수정)

이강용·2023년 2월 8일

Java 기초

목록 보기
21/26

Socket(수정)

Server

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

	private static final int PORT = 9090;
	
	public static void main(String[] args) {
		try {
			ServerSocket serverSocket = new ServerSocket(PORT);
			System.out.println("서버를 실행합니다.");
			
			while(true) {
				// 클라이언트의 연결을 기다림
				Socket socket = serverSocket.accept();
				// 클라이언트가 연결이 되면 소켓 객체를 하나 생성
				SocketServer socketServer = new SocketServer(socket);
				socketServer.start();
			}
			
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			System.out.println("서버를 종료합니다.");
		}
	}
	
}

SocketServer

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;

public class SocketServer extends Thread {
	
	public static List<SocketServer> clientList = new ArrayList<>();
	private Socket socket;
	private InputStream inputStream;
	private OutputStream outputStream;
	private static int autoIncrement = 1;
	private String name;
	
	public SocketServer(Socket socket) {
		this.socket = socket; // 해당 클라이언트랑 연결
		name = "user" + autoIncrement++ ;
		clientList.add(this); //List에 SocketServer들을 담는다
	}
	
	@Override
	public void run() {
		System.out.println("[연결된 클라이언트 정보]");
		System.out.println("IP: " + socket.getInetAddress());
		
		try {
			inputStream = socket.getInputStream();
			BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
			
			sendToAll(name + "님이 접속하였습니다."); 
			
			while(true) {
				String message = reader.readLine(); // 메세지가 들어올때까지 기다린다
				if(message == null) {  // 공백이 들어가도 전송이 된다
					break; // while 문을 빠져 나감
				}
				sendToAll(message);
			}
	
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			try {
				inputStream.close(); // Stream ex) 서버와 클라이언트를 만나게 해주는 통로 같은 역할
				outputStream.close();
				socket.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
	}
	private void sendToAll(String message) throws IOException {
		for(SocketServer socketServer : clientList) {
			outputStream = socketServer.socket.getOutputStream();
			PrintWriter writer = new PrintWriter(outputStream,true);
			writer.println(name + ": "+ message); // 여기서 name은 자기 자신
		}
	}
	
}

Clinet

import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

public class Client {
	
	
	public static void main(String[] args) {
		try {
			Socket socket = new Socket("127.0.0.1", 9090);
			
			ClientRecive clientRecive = new ClientRecive(socket);
			clientRecive.start();
			
			ClientSend clientSend = new ClientSend(socket);
			clientSend.start();
			
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
}

ClientRecive

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;

import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
public class ClientRecive extends Thread {

	private final Socket socket;
	
	@Override
	public void run() {
		try {
			InputStream inputStream = socket.getInputStream();
			BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
			
			while(true) {
				System.out.println(reader.readLine());		
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

ClientSend

import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

import com.mysql.cj.jdbc.exceptions.MySQLStatementCancelledException;

import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
public class ClientSend extends Thread {

	private final Socket socket;
	
	@Override
	public void run() {
		try {
			OutputStream outputStream = socket.getOutputStream();
			PrintWriter writer = new PrintWriter(outputStream, true);
			Scanner scanner = new Scanner(System.in);
			
			while(true) {
				writer.println(scanner.nextLine());
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
}

Usermanagement package

  • config
    • DBConnectionMgr
  • dto
    • RequestDto
    • ResponseDto
  • entity
    • RoleDtl
    • RoleMSt
    • User
  • frame
    • UserManagementFrame
  • repository
    • UserRepository
    • UserRepositoryArrayList
  • server
    • controller.packgage
      • AccountController
    • SocketServer
    • UserManagementServerApplication
  • service
    • UserService
profile
HW + SW = 1

0개의 댓글