일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Spring
- SECS-II
- Spotify Api
- C++
- Computer Science
- programmers
- java
- regression
- MYSQL
- CS
- 프로그래머스
- modern c++
- 비트겟
- c
- 회귀
- Spring JPA
- 자바
- SW Expert Academy
- spotify
- spring boot
- Gem
- SECS
- 회원가입
- 스포티파이
- python
- Baekjoon
- 파이썬
- 백준
- SECS/GEM
- SWEA
Archives
- Today
- Total
비버놀로지
[JAVA] TCP와 UDP 본문
728x90
- 소켓 프로그래밍
- 네트워크 프로그램도 결국 앞서 학습했던 I/O의 한 종류이다. 입력과 출력의 양 끝단을 노드라고 하는데 네트워크 프로그래밍에서의 노드를 소켓이라고 부른다. 이 소켓에서 각각 InputStream과 OutputStream을 생성해서 통신하게 된다.
- java에서는 java.net 패키지를 통해서 TCP(Transmission Control Protocol)와 UTP(User Datagram Protocol)방식의 네트워크 프로그래밍을 지원한다.
- TCP(Transmission Control Protocol)
- TCP는 전화와 마찬가지로 두 노드가 1:1로 연결 후 신뢰성 있는 통신을 한다. 여기서 신뢰성 있다는 말은 데이터의 전송 순서가 보장되며 데이터의 수신 여부가 확인되는 것이다. 이런 절차상 문제로 UDP보다는 속도가 느려진다. Java에서 TCP 통신을 위해 ServerSocket과 Socket이 사용된다.
- Server
try(
ServerSocket ss = new SeverSocket(8080); // 8080번에 소켓 생성
){
while(true) {
try(
Socket socket = ss.accept(); // 8080번에 누군가 접속하면 socket에 접속한다.
) {
//Writer를 이용해서 char를 쓰고 Byte 단위로 변경한후 socket에 UTF-8 형식으로 작성한다.
BufferdWriter bw = new BufferdWriter(new OutputStreamWriter(socket.getOutputStream(socket.getOutputStream(), "UTF-8"));
...
} catch(IOException e){
e.printStackTrace();
}
}
} catch( Exception e){
e.printStackTrace();
}
- Client
String host = "localhost";
int port = 5100;
//서버에 접속하기
try ( Socket client = new Socket(host, port) ) {
InputStream input = client.getInputStream();//연결된 서버를 읽겠다는 의미
// FileInputStream fis=new FileInputStream("a.txt"); //파일을 읽겠다는 의미
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
String message = reader.readLine();
System.out.println(message);
OutputStream out=client.getOutputStream();
PrintWriter writer=new PrintWriter(out);
out.write("echo".getBytes());
writer.println("echo");
} catch ( IOException e) {
System.out.println("NetworkSimpleClient exception: " + e.getMessage());
e.printStackTrace();
}
- UDP(User Datagram Protocol)
- UDP는 TV 방송처럼 노드간 연결은 없고 서버는 언제나 데이터를 보내며 관심있는 클라이언트만 데이터를 수신하는 구조로 TCP와 달리 1:1은 물론 1:n, n:n 등 다양한 접속 형태가 가능하며 통신 속도가 빠르다. 하지만 신뢰성 없는 데이터 전송이 이뤄지므로 데이터 전송 순서가 바뀐다거나 수신 여부의 확인이 어렵다.
- DatagramSocket, DatagramPacket이 사용된다.
728x90
'LANGUAGE STUDY > JAVA' 카테고리의 다른 글
[JAVA] String 클래스 (0) | 2020.08.23 |
---|---|
[JAVA] Object 클래스 (0) | 2020.08.23 |
[JAVA] 표준입출력과 File (0) | 2020.08.22 |
[JAVA] 예외처리구문 - try~catch~finally (0) | 2020.08.22 |
[JAVA] 예외처리(Exception handling) (0) | 2020.08.22 |
Comments