11월 22일 - 수업 22일차

수아레스·2022년 11월 22일
post-thumbnail

1. 1:1 채팅을 짜시오.

서버

import java.net.ServerSocket;
import java.net.Socket;

public class TCPServer {
	public static void main(String[] args) {
		
		ServerSocket serverSocket;
		Socket socket = null;
		
		try {
			serverSocket = new ServerSocket(7777);  //서버 생성
			socket = serverSocket.accept();
			
			Sender sender = new Sender(socket);
			Receiver receiver = new Receiver(socket);
			
			sender.start();
			receiver.start();
			
		}catch(Exception e) {
			e.printStackTrace();
		}
		
	}
}

클라이언트

import java.net.*;

public class TCPClient {
	public static void main(String[] args) {
		
		String serverIP = "192.168.0.43";
		
		try {
			Socket socket = new Socket (serverIP, 7777);
			
			System.out.println("서버에 연결되었습니다.");
			
			Sender sender = new Sender(socket);
			Receiver receiver = new Receiver(socket);
			
			sender.start();
			receiver.start();
			
		}catch(Exception e) {
			e.printStackTrace();
		}
		
	}
}

sender

import java.io.DataOutputStream;
import java.net.*;
import java.util.Scanner;

public class Sender extends Thread{
	Socket socket;
	DataOutputStream out;
	String name = "KINGSLAYER";
	
	public Sender(Socket socket) {
		try {
			out = new DataOutputStream(socket.getOutputStream());
			//name = "[" + socket.getInetAddress() + ":" + socket.getPort() + "]";
		}catch(Exception e) {
			
		}
	}
	
	@Override
	public void run() {
		Scanner sc = new Scanner(System.in);
		while(out != null) {
			try {
				out.writeUTF(name + sc.nextLine());
			}catch(Exception e) {
				
			}
		}
	}
}

receiver


import java.io.DataInputStream;
import java.net.*;

public class Receiver extends Thread{
	Socket socket;
	DataInputStream in;
	
	public Receiver(Socket socket) {
		try {
			in = new DataInputStream(socket.getInputStream());
		}catch(Exception e) {
			
		}
	}
	
	@Override
	public void run() {
		
		while(in != null) {
			try {
				System.out.println(in.readUTF()); // 한글도 안 깨지고 받을 수 있게 함.
			}catch(Exception e) {
				
			}
		}
	}
}

소켓은 TCP를 사용하는 두 컴퓨터 간의 통신 메커니즘을 제공한다. 클라이언트 프로그램은 통신 끝에 소켓을 만들고 해당 소켓을 서버에 연결하려고 시도한다. 연결이 생성되면 서버는 통신이 끝날 때 소켓 객체를 만든다. 클라이언트와 서버는 이제 소켓에 쓰고 읽는 방식으로 통신할 수 있다. java.net.Socket 클래스는 소켓을 나타내며 java.net.ServerSocket 클래스는 서버 프로그램이 클라이언트를 수신 대기하고 클라이언트와의 연결을 설정하는 메커니즘을 제공한다. 소켓을 써서 두 컴퓨터 간에 TCP 연결 설정 시 다음 단계가 발생한다.

  1. 서버는 어떤 포트 번호 통신이 발생하는지 나타내는 ServerSocket 객체를 인스턴스화한다
  2. 서버는 ServerSocket 클래스의 accept()를 호출한다. 이 메서드는 클라이언트가 지정된 포트의 서버에 연결할 때까지 기다린다
  3. 서버가 대기한 후 클라이언트는 연결할 서버 이름과 포트 번호를 지정해서 Socket 객체를 인스턴스화한다
  4. Socket 클래스의 생성자는 클라이언트를 지정된 서버 및 포트 번호에 연결하려고 시도한다. 통신이 설정되면 클라이언트는 서버와 통신할 수 있는 Socket 객체를 갖게 된다
  5. 서버 측에서 accept()는 클라이언트 소켓에 연결된 서버의 새 소켓에 대한 참조를 반환한다

연결이 설정되면 I/O 스트림을 사용해 통신할 수 있다. 각 소켓에는 OutputStream과 InputStream이 모두 있다. 클라이언트의 OutputStream은 서버의 InputStream에 연결되고, 클라이언트의 InputStream은 서버의 OutputStream에 연결된다. TCP는 양방향 통신 프로토콜이므로 두 스트림을 통해 동시에 데이터를 보낼 수 있다.


Socket의 주요 메소드

InetAddress getInetAddress() : 상대방 IP 정보 리턴

InetAddress getLocalAddress() : 자신의 IP 정보 리턴

int getPort() : 상대방 포트 번호

Int getLocalPort() : 자신의 포트 번호

InputStream getInputStream() : 데이터를 읽어오기 위한 스트림 리턴

OutputStream getOutputStream() : 데이터를 전송하기 위한 스트림 리턴

2. 아래의 용어에 대하여 설명하시오.

Web Server (= HTTP Server)

  • 클라이언트(browser)의 요청에 의해 정보를 제공(response)해 주는 서버
  • HTTP 프로토콜을 사용해 클라이언트와 통신한다. (HTTP는 클라이언트-웹서버간 문서를 전송하기 위한 통신 규약)
  • 정적인 정보를 처리하며(Static processe), 동적 처리(Dynamic processe)는 웹 어플리케이션 서버(WAS)에 요청한다.
  • 대표적으로는 Aphach HTTP Server, Microsoft IIS, Nginx 가 있다.

WAS (Web Application Server)

WAS = Web Server + Web Container

  • 일반적으로 웹 서버의 기능을 내제하고 있어 웹 서버 없이도 서비스가 가능하다.
  • 웹 서버에서 처리할 수 없는 동적인 정보를 처리하여(Dynamic processes) 웹 서버에 정적인 정보를 제공한다.
  • 웹 서버의 성능을 개선하기 위해 기능을 분리한 것
  • JSP프로그램을 실행시키고 결과를 웹 서버에 전달한다. (JSP 페이지를 .java 파일로 변환하고 컴파일 해서 .class 파일을 생성한 후 Html로 응답)
  • 모든 클라이언트의 요청에 대해 매번 프로세스를 생성하지 않고 하나의 자바 가상 기계 내에서 수행한다.
  • 대표적으로 가장 많이 사용되는 프로그램은 Aphach의 Tomcat(오픈 소스)과 tmaxsoft(국내 기업, 상용)의 JEUS이다. (국내에서는 JEUS를 많이 사용한다.) 그 외에 IBM WEbsphere Application Server, Red Hat JBoss 등이 있다.

3. Port Number (포트 번호) 란?

찾아간 IP 주소에서 실행하려는 프로그램 번호
데이터를 받을 프로세스가 어떤 것인지 알기 위해 사용하는 식별자

= 웹 애플리케이션 서버가 관리하는 경로

4. 프로토콜(Protocol)이란 무엇이며,프로토콜의 종류는?

📌 네트워크상에서 컴퓨터와 컴퓨터, 통신 장비들이 통신하기 위해 약속한 통신 규약으로 각각의 목적에 맞는 통신을 위한 약속들

📌 통신을 원하는 두 개체 간에 무엇을, 어떻게, 언제 통신할 것인가에 대해 미리 정의된 상호간의 약속

프로토콜의 종류

Http(Hyper Text Transfer Protocol): 인터넷에서 하이퍼 텍스트 문서를 교환하기 위해 사용되는 프로토콜

FTP(File Transfer Protocol): 컴퓨터 사이의 원활한 파일 전송을 위해 사용되는 프로토콜

SMTP(Simple Mail Transfer Protocol): 사용자의 컴퓨터에서 작성된 메일을 받아서 다른 사람의 계정이 있는 곳으로 전송해주는 전자 우편 송신 프로토콜

POP(Post Office Protocol): 전송받은 메일을 저장하고 있다가 사용자가 메일 서버에 접속하면 이를 보내주는 역할을 하는 전자 우편 수신 프로토콜

DHCP(Dynamic Host Configuration Protocol): 클라이언트가 동적인 IP주소를 할당받아 인터넷을 사용할 수 있게 해주는 프로토콜, 고유한 IP주소를 가져야 다른 네트워크나 인터넷에 접속할 수 있는데 DHCP는 고유한 IP주소 없이 접속할 때 자동으로 새로운 IP주소를 할당해준다.

5. 웹서버 종류는?

profile
띵호와

0개의 댓글