TCP vs UDP
TCP/UDP 포트 목록
- TCP/IP의 전송계층에서 사용되는 프로토콜
- 전송계층은 IP에 의해 전달되는 패킷의 오류를 검사하고 재전송 요구 등의 제어를 담당
- 신뢰성이 요구되는 애플리케이션은 TCP를 사용
- 간단한 데이터를 빠른 속도로 전송(UDP는 비연결지향형이라서) 하고자 하는 애플리케이션에서는 UDP를 사용
TCP
- 자바는 TCP 네트워킹을 위해 Socket & ServerSocket 클래스를 제공
- 연결 지향형 프로토콜
TCP 구현을 위한 클래스들
- InetAddress클래스
- URL, URLConnection 클래스
- Socket & ServerSocket 클래스
Socket / SeverSocket클래스
Socket클래스
- Client가 Server로 연결요청을 한다.
- 커뮤니케이션을 위해 사용하는 양 끝단을 Socket (ex. 대화창, 파일전송)
- 데이터 전송을 담당
- 인터넷 연결
Socket클래스 주요생성자
생성자 | 설명 |
---|
Socket(InetAddress address, int prot) | InetAdress 객체와 port를 이용하여 Socket객체를 생성 |
Socket(String host, int port) | host와 port를 이용하여 Socket 객체를 생성 |
Socket클래스 주요메서드
반환형 | 메서드 | 설명 |
---|
void | close() | 소켓 객체를 담는다 |
InetAdress | getInetAdress() | 소켓 객체를 InetAdress객체로 반환 |
InputStream | getInputStream() | 소켓 객체로부터 입력할 수 있는 InputStream객체를 반환 |
InetAdress | getLocalAddress() | 소켓 객체의 로컬 주소를 반환 |
int | getPort() | 소켓 객체의 포트를 반환한다 |
boolean | isClosed() | 소켓 객체가 닫혀있으면 true를 반환, 열려있으면 false를 반환 |
boolean | isConnection() | 소켓객체가 연결되어 있으면 true, 연결되어 있지 않으면 false를 반환 |
ServerSocket 클래스
- 서버 프로그램에서 사용하는 소켓
- 포트를 통해 연결 요청이 오길 대기
- 요청이 오면 클라이언트와 연결을 맺고 또 다른 소켓을 만드는 일을 한다.
- 새로 만들어진 소켓은 클라이언트 소켓과 데이터를 주고 받는다.
ServerSocket 클래스 주요 생성자
생성자 | 설명 |
---|
ServerSocket(int port) | port를 이용하여 ServerSocket객체를 생성 |
ServerSocket 클래스 주요 메서드
반환형 | 메서드 |
---|
Socket | accept() |
void | close() |
int | getLocalPort() |
int | getSoTimeout() |
boolean | isClosed() |
boolean | setSoTimeout(int timeout) |
TCP 소켓 서버(Server) 프로그래밍
- 동작과정
- TCP 소켓통신을 하기 위해 ServerSocket객체 생성 : port번호를 갖고 생성
- ServerSocket객체의 accept()메서드를 호출하여 Client로부터 연결요청이 올 때까지 계속 기다린다
- 연결 요청이 들어오면 새로운 Socket객체를 생성하여 Client의 Socket과 연결
- Socket객체의 Stream객체(InputStream,OuputStream)을 이용하여 메세지를 주고 받는다.
- 사용이 완료된 소켓은 close()메서드를 이용하여 종료 처리한다
- 예제 6.JavaNetworkTest / T01_TcpServer
public class T01_TcpServer {
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(7777);
System.out.println("서버가 접속을 기다립니다...");
Socket socket = server.accept();
System.out.println("접속한 클라이언트 정보");
System.out.println("주소 : "+ socket.getInetAddress());
OutputStream out = socket.getOutputStream();
DataOutputStream dos = new DataOutputStream(out);
dos.writeUTF("어서 오세요...");
System.out.println("메시지를 보냈습니다.");
dos.close();
server.close();
}
}
TCP 소켓 클라이언트(Client) 프로그래밍
- 동작과정
- Socket 객체를 생성하여 서버에 연결 요청을 하다 : 자신의 IP주소와 Port번호를 갖고!
- 연결이 정상적으로 이루어 지면 생성된 Socket객체를 이용하여 서버와 메세지를 주고 받는다.
- 생성된 Socket 객체로부터 스트림(InputStream, OutputStream)객체를 가져와 이용함
- 사용이 완료된 소켓은 close()메서드를 이용하여 종료처리한다.
public class T02_TcpClient {
public static void main(String[] args) throws IOException {
String serverIp = "127.0.0.1";
System.out.println(serverIp + " 서버에 접속 중입니다.");
Socket socket = new Socket(serverIp, 7777);
System.out.println("연결되었습니다.");
InputStream is = socket.getInputStream();
DataInputStream dis = new DataInputStream(is);
System.out.println("받은 메시지 : "+ dis.readUTF());
System.out.println("연결종료.");
dis.close();
socket.close();
}
}