본문 바로가기
Backend/JAVA

클라이언트와 서버 구축하기 (기본)

by 지구 2018. 6. 5.

java.net 패키지와 java.io 패키지를 이용하여 C/S 구조를 만들어본다.

< 동작 절차 >

1. Server 에서 ServerSocket 클래스를 통해 Port 를 오픈시키고

2. Client 에서 Socket 클래스를 통해 IP와 Port로 Server 에 접근한다.

3. 그렇게 연결된 C/S 는 java.io 의 InputStream과 OutputStream 을 이용해 데이터를 주고받는다.


Server.java

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
package base.server;
 
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
 
public class ServerApp01 {
 
    public static void main(String[] args) throws Exception {
        ServerSocket serverSocket = new ServerSocket(7000);
        
        System.out.println("[Server] : Client의 접속을 기다린다...");
        
        Socket socket = serverSocket.accept();
        System.out.println("[Server] : Client 연결 완료...\n");
        
        BufferedReader fromClient = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));
        PrintWriter toClient = new PrintWriter(new OutputStreamWriter(socket.getOutputStream(),"UTF-8"),true);
        
        System.out.println("[Server] : Client 접속 후 Data를 받기위한 무한 loop start...\n");
        
        while(true) {
            String clientData = fromClient.readLine();
        
            System.out.println("[Server] : Client로 부터 전송받은 Data ==> "+clientData);
            toClient.println("server 회신 [Data receiver OK]");
        }
    }
 
}
 
cs


Client.java

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
55
56
57
58
59
60
61
62
package base.client;
 
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
 
public class SocketClientApp {
    private Socket socket;
    private BufferedReader fromServer;
    private PrintWriter toServer;
    
    public SocketClientApp() throws Exception{
        this.connect("127.0.0.1","7000");
        this.dataSendAndReceive();
    }
    
    public void connect(String connectIp, String connectPort) {
        try {
            socket = new Socket(connectIp, Integer.parseInt(connectPort));
            
            socket.setSoTimeout(3000);
            
            toServer = new PrintWriter(new OutputStreamWriter(socket.getOutputStream(),"UTF-8"),true);
            fromServer = new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8"));
        }catch(Exception e) {
            e.printStackTrace();
        }
    }
    
    public void dataSendAndReceive() {
        BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in));
        
        try {
            while(true) {
                System.out.print("[Client] : Server로 전송할 Data : ");
                String content = keyboard.readLine();
                
                if(content.equals("quit")) {
                    break;
                }
                
                toServer.println(content);
                
                String serverData = fromServer.readLine();
                
                System.out.println("[Client] : Server로 부터 받은 Data : "+serverData);
            }
        }catch(Exception e) {
            e.printStackTrace();
        }
    }
 
    public static void main(String[] args) throws Exception{
        new SocketClientApp();
    }
}
 
 
 
 
cs


반응형

댓글