네트워킹
웹 소켓 통신
네트워크 :
-실시간으로 서로 데이터를 주고 받을 수 있는 컴퓨터 및 다른 장치들의 집합
- 두 대 이상의 컴퓨터를 연결하고 서로 통신할 수 있는 것
-규모에 따른 네트워크 종류 :
WAN : 광대역 네트워크 -> 인터넷
MAN : 대도시 영역 네트워크
LAN : 근거리 영역 네트워크
PAN : 가장 작은 규모의 네트워크
네트워크 용어
1. 노드(Node) : 네트워크에 연결된 장치
2. 주소(Address) :
-노드를 유일하게 구별해주는 일련의 바이트
- 네트워크 종류에 따라 다르게 할당
3. 도메인(Domain) :
-노드를 기억하기 쉽도록 노드에 부여한 이름
- 문자로 만든 인터넷 주소
4. 패킷 교환 (Packet-switched) :
- 데이터를 작은 단위[패킷]으로 분리하여 네트워크 회 선 공유
-송신자와 수신자의 정보 포함
5. 프로토콜(Protocol) :
- HTTP(HyperText Transfer Protocol : 웹 브라우저와 웹 서버가 통신하는 방법
SSL 인증서 를 사용하는 https는 기본포트 443
- IEEE 802.3 : 물리적 전선에서 비트가 전기적인 신호로 바뀌는 방법 정의
6. IP(Internet Protocol):
- 군사적인 특성 내포
- 두 지점 사이의 여러 경로를 허용하고 손상된 라우터 주변 데이터의 패킷을 라우팅 할 수 있도록 설계
7.TCP(Transmission Control Protocol) :
- IP 프로토콜 위에서 연결형 서비스 제공
- 각 연결의 끝에 IP 패킷의 수신 여부 확인 기능과 손상 되거나 손실되 패킷에 대한 재전송 요청기능 추가
8. UDP(User Datagram Protocol) :
- 사용자 데이터그램 프로토콜
-보내는 쪽에서 일방적으로 데이터를 전달하는
통신 프로토콜
9.포트(Port) :
-TCP와 UDP가 상위 계층에 제공하는 주소 표현 방식
-1에서 655535까지의 숫자로 표현
-1에서 1023까지는 FTP,HTTP와 같이 잘 알려진 서비시 를 위해 미리 예약되어 있음
10. 인터넷 :
-IP 프로토콜을 사용하는 컴퓨터들의 집단
11.인터넷 주소 클래스 :
-InterNIC(Internet Network Information Center) 할당
-A,B,C Class는 네트워크용, D Class는 멀티캐스팅용,E Class는 예비용
socket 클래스 :
-소켓은 단순히 시스템 간의 통신을 위한 끝점을 의미
-소켓 인스턴스를 생성하기 위해서는 서버 소켓의 ip주 소와 port번호가 있어야 하고, 소켓 연결이 가능한
서버가 실행 중 이어야함
-클라이언트 애플리케이션을 생성하려면 socket 클래 스의 인스턴스를 생성해야 함
-이때 생성자에 서버의 ip 주소 또는 호스트 이름과 포 트 번호를 전달해야 함
서버 소켓 클래스 : 자바에서 서버를 작성하기 위해 필요한 모든 것을 제공함
자바 네트워크 간단한 예제 |
package ex.th2;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.Scanner;
public class MessageClinet {
public static void main(String[] args) {
Socket socket = null;
DataInputStream din =null;
DataOutputStream dout = null;
try {
//중복되지않는 포트번호부여
socket = new Socket("localhost",8888);
//데이타 입력을 위한 inputStream
din = new DataInputStream(socket.getInputStream());
//서버에서 전송한 데이터를 읽기위한 outputStream
dout = new DataOutputStream(socket.getOutputStream());
Scanner scan = new Scanner(System.in);
String str1 = null; // 받는 데이터
String str2 = ""; // 보내는 데이터
System.out.println("Server가 접속완료했습니다.");
System.out.println("======================================");
//str2의 참조하는 인스턴스가 없기 때문에 null을 사용할 수 없다.
while(!str2.equals("exit")) {
//데이터 전송
str2 = scan.nextLine();
dout.writeUTF(str2);
//데이터 수신
str1 = din.readUTF();
System.out.println("Server Message : "+str1 );
}
} catch (IOException e) {
e.printStackTrace();
}finally {
Util.close(socket);
Util.close(din);
Util.close(dout);
}
}
}
======================================================================================================
package ex.th2;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class MessageServer {
public static void main(String[] args) {
DataInputStream din = null;
DataOutputStream dout = null;
ServerSocket ss = null;
Socket socket = null;
try {
ss = new ServerSocket(8888);
System.out.println("서버 실행");
System.out.println("=================================");
socket = ss.accept();
System.out.println("client 접속");
System.out.println("=================================");
din = new DataInputStream(socket.getInputStream());
dout = new DataOutputStream(socket.getOutputStream());
Scanner scan = new Scanner(System.in);
//초기화시 공백문자열도 인스턴스가 생기므로 null사용
String str1 = null; // 받는 메세지
String str2 = ""; // 보내는 메세지
while(!str2.equals("exit")) {
//클라이언트와 서버가 접속되면 서버에서 먼저 클라이언트 측에서 데이터를 수신한다.
str1 = din.readUTF();
System.out.println("Client Message : "+str1);
//클라이언트의 요청에 맞는 정보를 송신하기 위해
str2 = scan.nextLine();
dout.writeUTF(str2);
dout.flush();
}
} catch (IOException e) {
e.printStackTrace();
}finally {
Util.close(din);
Util.close(dout);
Util.close(ss);
Util.close(socket);
}
/*if(din != null) {
try {
din.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(dout != null) {
try {
dout.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(socket != null) {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(ss != null) {
try {
ss.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}*/
}
}