반응형
소켓
: 데이터를 내보내거나 받기 위한 창구 역할을 한다.
= 두 호스트 간에 통신을 하기 위한 양 끝단(EndPoint)
소켓에는 TCP와 UDP 종류가 있다.
OSI와 TCP/IP
- OSI 7계층
1계층 - 물리 계층(Physical Layer) : 전기적 신호를 전송
2계층 - 데이터 링크 계층(Data Link Layer) : 물리적인 연결로 정보 전송
3계층 - 네트워크 계층(Network Layer) : 중계 방식 규정
4계층 - 전송 계층(Transport Layer) : 종단 간의 신뢰성 있고 정확한 데이터 전송
5계층 - 세션 계층(Session Layer) : 통신장치 간의 동기화
6계층 - 표현 계층(Presentation Layer) : 제어 구조 제공
7계층 - 응용 계층(Application Layer) : 사용자와 밀접, 인터페이스 역할
- TCP/IP 4계층
1계층 - 네트워크 액세스 계층(Network Access Layer) : OSI 7계층의 물리계층과 데이터 링크 계층에 해당
2계층 - 인터넷 계층(Internet Layer) : OSI 7계층의 네트워크 계층에 해당
3계층 - 전송 계층(Transport Layer) : OSI 7계층의 전송 계층에 해당
4계층 - 응용 계층(Application Layer) : OSI 7계층의 세션 계층, 표현 계층, 응용 계층에 해당
TCP와 UDP 차이
TCP | UDP | |
신뢰성 | 높음 | 낮음 |
속도 | 낮음 | 높음 |
전송 방법 | 패킷이 순서대로 전달됨 | 패킷이 스트레이트로 전달됨 |
오류 감지 및 수정 | 있음 | 없음 |
혼잡도 제어 | 있음 | 없음 |
전송 인정 | 있음 | 오직 체크섬만 |
소켓 통신
- 서버
package kr.or.ddit.tcp;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class TcpSocketServer {
public static void main(String[] args) throws IOException {
// 소켓이란? 두 호스트 간에 통신을 하기 위한 양 끝단(EndPoint)을 말한다.
// TCP 소켓 통신을 하기 위해 ServerSocket 객체 생성하기
ServerSocket server = new ServerSocket(7777);
System.out.println("서버가 소켓접속을 기다립니다....");
// accept() 메서드는 클라이언트에서 접속 요청이 올 때까지 계속 기다 린다.
// 연결 요청이 오면 Socket객체를 생성해서 클라이언트와의 통신에 사용한다.
Socket socket = server.accept();
// ----------------------------------------------------------
// 이 이후는 클라이언트의 연결된 후의 작업을 진행하면 된다.
System.out.println("접속한 클라이언트 정보 ");
System.out.println("주소 : " + socket.getInetAddress());
// 클라이언트에서 메시지 보내기
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
dos.writeUTF("어서오세요... 반갑습니다...");
System.out.println("클라이언트에 메시지를 보냈습니다.");
dos.close();
server.close(); // 서버 닫기
}
}
- 클라이언트
package kr.or.ddit.tcp;
import java.io.DataInputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
public class TcpSocketClient {
public static void main(String[] args) throws IOException{
String serverIp = "127.0.0.1";
// 자기 자신의 컴퓨터를 나타내는 방법
// IP : 127.0.0.1
// host name : localhost
System.out.println(serverIp + " 서버에 접속 중입니다.");
// 소켓을 생성해서 서버에 연결을 요청한다.
Socket socket = new Socket(serverIp, 7777);
// 연결이 되면 이 후 부분이 실행된다.
System.out.println("서버와 연결 되었습니다.");
// 서버에서 보내온 메시지 받기
DataInputStream dis = new DataInputStream(socket.getInputStream());
System.out.println("서버로부터 받은 메시지 : " + dis.readUTF());
System.out.println("클라이언트 소켓 연결 종료.");
dis.close();
socket.close();
}
}
=> 서버 실행 후 클라이언트 실행해야 함
반응형
'자바' 카테고리의 다른 글
[Java 고급] 25장 UDP 방식의 통신, HTTP 통신 (0) | 2024.02.16 |
---|---|
[Java 고급] 24장 TCP 방식의 통신 (0) | 2024.02.16 |
[Java 고급] 22장 IP주소 정보 (0) | 2024.02.14 |
[Java 고급] 21장 W3C DOM, 유스케이스 다이어그램 (0) | 2024.02.13 |
[Java 고급] 20장 로깅 (0) | 2024.02.08 |