TCP는 연결지향적 프로토콜로 데이터를 안전하고 정확하게 전달한다.


데이터가 잘 전송 됫는지 확인 작업이 따로 있으며


작업이 추가로 있기 때문에 UDP보다 느리다.





여기서는 Socket을 이용한 통신을 해볼것이다.


Socket은 안에 IP, 포트 등 다양한 정보를 담고


상대방에게 전송된다.


다음의 간단한 예제를 통해 확인해보자.



서버


package chap12.exam02.tcp;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

	public static void main(String[] args) {

		ServerSocket server = null;

		// 1. 서버 소켓 생성
		try {
			server = new ServerSocket();
			// 2. IP를 개방 (열어주길 원하는 IP, 오픈 호스트), localhost는 자기 자신의 IP를 의미
			server.bind(new InetSocketAddress("localhost", 5001));
			// 3. 요청 대기
			while(true) {
				System.out.println("요청 대기중");
				// 4. 접속 요청이 있을 경우 수락 (하나의 스레드, 조인, 블로킹하여 요청이 올 때 까지 대기)
				Socket socket = server.accept();
				// 4-1. 요청이 있을 경우 처리 (클라이언트 주소 알아내기)
				InetSocketAddress addr = (InetSocketAddress) socket.getRemoteSocketAddress();
				System.out.println("접속 완료 >" + addr.getAddress() + ":" + addr.getPort());
			}
			// 5. 자원 반납 (서버는 5번 아래로 잘 안씀)
			// 6. 종료
		} catch (IOException e) { // 서버에 문제가 있을 때
			// 5. 자원 반납 (서버는 5번 아래로 잘 안씀)
			try {
				server.close();
			} catch (IOException e1) {
				e1.printStackTrace();
			}
			// 6. 종료
			e.printStackTrace();
		}
	}

}


클라이언트


package chap12.exam02.tcp;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Socket;

public class Client {

	public static void main(String[] args) {
		Socket socket = null;
		
		try {
			// 1. 소켓 생성
			socket = new Socket();
			
			// 2. 접속 요청
			socket.connect(new InetSocketAddress("localhost", 5001));
			
			// 3. 시킬 일 있으면 요청
			System.out.println("접속 완료");
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			// 4. 종료
			try {
				socket.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

}


먼저 서버를 작동한 후 클라이언트 코드도 작동을 해줘야 하는데


서버는 이클립스에서 돌리고


https://qdgbjsdnb.tistory.com/79 를 참조하여 cmd에서 클라이언트를 작동해보자.






+ Recent posts