티스토리 뷰



  이번에는 소켓 프로그래밍이 네트워크 프로그래밍에 있어서 매우 중요한 부분을 차지하기 때문에 아주 간단한 서버와 클라이언트 소켓 프로그램을 보여주면서 매우 기본적이고 범용적으로 사용할 수 있는 소켓에 대해 소개하도록 하겠다. 만약 Server/Client 프로그래밍을 하게 된다면 필연적으로 만들어야 하는 부분이기에 아주 중요한 개념이다.


  또한, 양쪽에서의 송수신이 어떤 방식으로 이루어지는지도 한번 살펴보면서 기초적인 소켓 프로그래밍에 대해 살펴볼 뿐만 아니라 이제껏 소개한 개념을 Rewind 하는 방식으로 진행해볼까 한다.


1. 서버 소켓 만들기

  간단한 Server / Client 소켓 프로그래밍 예제를 살펴보자. 우선 서버 소켓을 만들기 위해 포트와 서버 소켓을 연결하고, Accept() 메소드를 통해서 클라이언트에서 소켓으로의 연결을 기다려야 한다.


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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;
import java.text.SimpleDateFormat;
 
public class TCPServer {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
 
        ServerSocket serversocket = null;
        
        try {
            serversocket = new ServerSocket(7777);
            System.out.println("서버 연결이 준비되었습니다.");
        }
        catch (IOException e){
            e.printStackTrace();
        }
        while (true) {
            try {
                // 연결 요청이 올떄 까지 대기
                System.out.println(getTime() + "연결 대기중");
                
                // Accept
                Socket socket = serversocket.accept();
                
                System.out.println(getTime() + "연결 요청 :" + socket.getInetAddress());
        
                // OutputStream
                OutputStream out = socket.getOutputStream();
                DataOutputStream dos = new DataOutputStream(out);
                
                
                dos.writeUTF("Test Message");
                System.out.println(getTime() + "데이터 전송");
                
                dos.close();
                socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        
    }
    static String getTime() {
        SimpleDateFormat f = new SimpleDateFormat("[hh:mm:ss]");
        return f.format(new Date());
    }
 
}
cs



2. 클라이언트 소켓 만들기

  클라이언트 소켓의 기본 매커니즘은 연결하려는 소켓 서버 IP와 포트 번호를 입력하고, 소켓을 생성하여 서버로 부터의 응답을 기다린다. 응답이 온 이후 스트림을 생성하여 서버와 데이터를 주고 받게 된다.


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
32
33
34
35
36
37
38
39
40
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ConnectException;
import java.net.Socket;
 
public class ClientSocket {
    
    public static void main(String args[]) {
    
        try {
            
            // 서버 연결
            String serverIp = "127.0.0.1";
            System.out.println("IP :" + serverIp + "연결 중입니다.");
            
            // 소켓 생성
            Socket socket = new Socket(serverIp, 7777);
            
            // InputStram
            InputStream in = socket.getInputStream();
            DataInputStream dis = new DataInputStream(in);
            
            // 데이터 출력
            System.out.println("Message :" + dis.readUTF());
            
            // 스트림 및 소켓 종료
            dis.close();
            socket.close();
            System.out.println("연결 종료.");
            
        } catch (ConnectException ce) {
            ce.printStackTrace();
        } catch (IOException ie) {
            ie.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
cs



3. 송수신 실행

  윈도우 cmd 창을 이용해 실제로 송수신이 어떤 식으로 이루어지는지 확인 할 수 있다. 앞서 말한 순서대로 서버에서 우선 클라이언트의 연결을 받기 위해 미리 생성 후 대기상태가 되어야 하므로, 필수적으로 서버소켓을 먼저 만들어야한다.


  이후 클라이언트 소켓을 실행하여 서버 소켓과의 통신을 시도하면 두 소켓의 연결이 완료된다. 결과 값은 아래와 같이 출력된다.


- 서버 소켓


- 클라이언트 소켓



'Skill > Programming - Network' 카테고리의 다른 글

20. 버퍼 (Buffer)  (0) 2019.09.20
19. Java NIO (New IO)  (0) 2019.09.11
17. 네트워크 보안 및 보안 소켓  (0) 2019.08.31
16. 서버 소켓  (0) 2019.08.16
15. 클라이언트 소켓  (0) 2019.08.04
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
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
글 보관함