● TCP/IP 프로토콜
: TCP는 Transmission Control Protocol
- 두 시스템 간에 신뢰성 있는 데이터의 전송을 관장하는 프로토콜입니다.
- TCP에서 동작하는 응용프로그램 사례 : e-mail, FTP, 웹(HTTP) 등
: IP는 Internet Protocol
- 패킷 교환 네트워크에서 송신 호스트와 수신 호스트가 데이터를 주고 받는 것을 관장하는 프로토콜입니다.
- TCP보다 하위 레벨 프로토콜
+) IP 주소 : 네트워크 상에서 유일하게 식별될 수 있는 컴퓨터 주소입니다.
- 숫자로 구성된 주소로 4개의 숫자가 ‘.’으로 연결되어있습니다. 예) 192.156.11.15
- 숫자로 된 주소는 기억하기 어려우므로 www.naver.com과 같은 문자열로 구성된 도메인 이름으로 바꿔 사용합니다.
● 포트
- 통신하는 프로그램 간에 가상의 연결단 포트 생성합니다.
- IP 주소는 네트워크 상의 컴퓨터 또는 시스템을 식별하는 주소입니다.
- 포트 번호를 이용하여 통신할 응용프로그램 식별합니다.
- 모든 응용프로그램은 하나 이상의 포트 생성 가능합니다.
- 포트를 이용하여 상대방 응용프로그램과 데이터 교환합니다.
● 클라이언트/서버(client/server)
- 컴퓨터간의 관계를 역할(role)로 구분하는 개념으로 서비스를 제공하는 쪽이 서버, 제공받는 쪽이 클라이언트입니다.
- 제공하는 서비스의 종류에 따라 메일서버(email server), 파일서버(file server), 웹서버(web server) 등이 있습니다.
- 전용서버를 두는 것을 ‘서버기반 모델’, 전용서버없이 각 클라이언트가 서버역할까지 동시에 수행하는 것을
‘P2P 모델’이라고 합니다.
● 소켓 프로그래밍
소켓 (socket)
: TCP/IP 네트워크를 이용하여 쉽게 통신 프로그램을 작성하도록 지원하는 기반 기술을 말합니다.
특징
- 두 응용프로그램 간의 양방향 통신 링크의 한쪽 끝 단
- 소켓끼리 데이터를 주고받음
- 소켓은 특정 IP 포트 번호와 결합
- 자바로 소켓 통신할 수 있는 라이브러리 지원
- 소켓 종류 : 서버 소켓과 클라이언트 소켓
- 전화할 때 양쪽에 전화기가 필요한 것처럼, 프로세스간의 통신에서도 양쪽에 소켓이 필요
예시) Socket 클래스(서버/ 클라이언트)
서버)
public class SocketServer { // 서버로 구성해서 동작.
public static void main(String[] args) {
try {
ServerSocket serverScoket = new ServerSocket(9001);
// 서버로 동작되게 구성하도록 해준다.
// ServerSocket 인스턴스 되는 순간 서버로 구현되어지도록 한다(환경구축 완료)
while(true) { // 클라이언트의 요청이 오면 바로 처리 할 수 있도록 무한대기 한다.
Socket socket = serverScoket.accept();
ObjectInputStream InStream =
new ObjectInputStream(socket.getInputStream());
// 프로그램과 socket 사이의 통로로 내용을 꺼내온다.
String msg = InStream.readUTF();
// 유니코드로 되어있는 문자열을 읽어오도록 한다.
System.out.println("클라이언트가 전송해 온 메세지 : " + msg);
if(msg.equals("exit")) {break;}
ObjectOutputStream outStream =
new ObjectOutputStream(socket.getOutputStream());
outStream.writeUTF("홍길동이 전달한 메세지 : " + msg + "잘 받았어요.");
// writeUTF 그냥 두면 buffer 가 찰 때까지 기다린다.
// 실시간 처리
outStream.flush();
// 사용후 close();
outStream.close();
InStream.close();
socket.close();
}
serverScoket.close();
} catch (IOException e) {
e.printStackTrace();
}
ServerSocket serverScoket = new ServerSocket(9001); // 서버로 동작되게 구성하도록 해줍니다. ( ) 안의 숫자는 포트번호로 9001 번으로 셋팅 , 1000~9999 부터는 임의로 번호를 부여해서 사용할 수 있으며, 안정적으로는 5000이후 번호로 셋팅 하는 것이 좋습니다. 9001 포트번호로 이 프로그램을 사용합니다. (정보 전달)
- 운영체지는 포트 번호로 프로그램들을 관리한다.
주의) DB 설치할 때 default 값으로 8080으로 되어있으므로 8080을 사용하지 않아야 합니다.
Scoket socket = serverScoket.accept();
참조변수를 선언해서 전달 받은 주소값을 저장한다. 메모리에는 클라이언트의 정보가 모두 들어있습니다. 서버는 대기하고 클라이언트가 요청할 때까지 대기하다가 요청해오면 그 정보를 메모리에 담아서(안에서 new) Scoket 단위로 저장하여 그 주소값을 return 해서 socket에 저장해줍니다.
outStream.writeUTF("홍길도이 전달한 메세지 : " + msg + "잘 받았어요.");
writeUTF 그냥 두면 buffer 가 찰 때까지 기다립니다 하지만 채팅 프로그램에서는 퍼포먼스보다 속도가 중요하기에
실시간으로 보내는 flush();를 사용합니다.단, flush();는 퍼포먼스가 많이 떨어지므로 상황에 맞춰서 사용하는 것이 좋습니다.
클라이언트)
public class SocketClient {
public static void main(String[] args) {
try {
Socket socket = new Socket("localhost", 9001);
ObjectOutputStream outStream =
new ObjectOutputStream(socket.getOutputStream());
outStream.writeUTF("홍길동");
outStream.flush();
ObjectInputStream inStream =
new ObjectInputStream(socket.getInputStream());
String msg = inStream.readUTF();
System.out.println("서버로부터 전송되어진 메세지 :");
System.out.println(msg);
inStream.close();
outStream.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
위의 서버와 연동을 하기 위해서 Socket socket = new Socket("localhost", 9001); "localhost" = 내 pc
저의 pc의 서버와 연결하기 위해서 "localhost"를 사용하였고, 다른 pc와 연결해주고 싶을 때는 "localhost" 자리에 pc IP를 넣어주면 됩니다.
서버를 실행한 이후 클라이언트를 실행하면 결과 값으로 밑의 결과가 나타납니다.
서버로부터 전송되어진 메세지 :
홍길동이 전달한 메세지 : 홍길동 잘 받았어요.
'빅데이터 > JAVA' 카테고리의 다른 글
[JAVA] SWING (2) (0) | 2020.05.25 |
---|---|
[JAVA] SWING(1) (0) | 2020.05.23 |
[JAVA] 스트림(Stream) (0) | 2020.05.20 |
[JAVA] Thread (0) | 2020.05.19 |
[JAVA] 컬렉션 프레임워크 ( Collection Framework ) (0) | 2020.05.18 |