[Java] 네트워크

이주형·2023년 5월 21일
0

Java

목록 보기
10/10

📌 네트워크

원격지의 컴퓨터와 데이터를 송수신하는 것.
데이터에 여러 컴퓨터가 접근할 수 있는 환경을 위해.

  • 서버 : 서비스를 제공하는 프로그램으로 클라이언트가 원하는 데이터를 보내준다.

  • 클라이언트 : 서비스를 받는 프로그램으로 서버로부터 데이터를 받아 사용자에게 표시하거나 요청한 작업을 수행한다.

  • IP : 컴퓨터 시스템이 가지고 있는 주소. 공인 IP일 경우 다른 컴퓨터가 쉽게 접근해서 데이터 통신을 할 수 있지만 공유기 등으로 연결되어 사설 IP를 받았을 경우 외부에서의 접근을 위해서는 다른 방법을 이용해야만 한다.

  • 포트 : 컴퓨터의 네트워크 통신에서 프로세스 또는 서비스를 식별하기 위한 번호. 하나의 컴퓨터에서 여러 개의 네트워크 프로그램이 동시에 운영될 수도 있다.

  • 소켓 : 컴퓨터 네트워크에서 프로그램 간의 양방향 통신을 위한 인터페이스. 서버와 클라이언트는 1:多의 관계가 가능한데 모두 같은 포트로 들어온다. 각 클라이언트와 1:1의 연결 관계를 유지 시켜주는것이 소켓이다.

서버

public class ServerClass {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		try {
			// ServerSocket 객체를 생성
			// 프로그램이 사용할 포트 번호를 지정
            // 0에서 65535까지의 포트 번호가 있다.
			ServerSocket server = new ServerSocket(30_000);
			System.out.println("서버 가동");

			// 사용자 접속을 대기한다.
			// 사용자가 접속할 때까지 대기하며 접속에 성공하면
			// 접속한 클라이언트와 1:1로 연결되어 있는 Socket이 생성된다.
			Socket socket = server.accept();
			System.out.println(socket);

			// 데이터를 보낸다.
			OutputStream os = socket.getOutputStream();
			DataOutputStream dos = new DataOutputStream(os);

			dos.writeInt(100);
			dos.writeDouble(11.11);
			dos.writeBoolean(true);
			dos.writeUTF("서버가 보낸 문자열");

			// 클라이언트가 보낸 데이터를 받는다.
			InputStream is = socket.getInputStream();
			DataInputStream dis = new DataInputStream(is);

			int data1 = dis.readInt();
			double data2 = dis.readDouble();
			boolean data3 = dis.readBoolean();
			String data4 = dis.readUTF();

			System.out.println(data1);
			System.out.println(data2);
			System.out.println(data3);
			System.out.println(data4);

			// 클라이언트와의 연결을 해제한다.
			socket.close();

			// 서버 종료
			server.close();

		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

클라이언트

public class ClientClass {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		try {
			// 서버에 접속한다.
            // 이때, IP 주소와 포트 번호를 설정해줘야 한다.
            // 127.0.0.1 : 자기 자신 컴퓨터를 가르키는 IP주소
            // 서버와 클라이언트를 같은 컴퓨터에서 개발할 때 사용하는
            // 테스트용 IP 주소          
			Socket socket = new Socket("192.168.0.5", 30_000);
			System.out.println(socket);
			
			// 데이터를 받는다.
			// 스트림 추출
			InputStream is = socket.getInputStream();
			DataInputStream dis = new DataInputStream(is);
			
			int data1 = dis.readInt();
			double data2 = dis.readDouble();
			boolean data3 = dis.readBoolean();
			String data4 = dis.readUTF();
			
			System.out.println(data1);
			System.out.println(data2);
			System.out.println(data3);
			System.out.println(data4);
			
			// 서버로 데이터를 보낸다.
			OutputStream os = socket.getOutputStream();
			DataOutputStream dos = new DataOutputStream(os);
			
			dos.writeInt(200);
			dos.writeDouble(22.22);
			dos.writeBoolean(false);
			dos.writeUTF("클라이언트가 보낸 문자열");
			
			// 접속 해제
			socket.close();
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

0개의 댓글