달력

4

« 2024/4 »

  • 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
728x90
반응형

안드로이드 - 소켓 프로그래밍 (TCP/IP) Server&Client 예제 (쓰레드 활용)

원본출처: http://warmz.tistory.com/597


TcpIpServer.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
63
64
65
66
67
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
 
public class TcpIpServer implements Runnable {
    ServerSocket serverSocket;
    Thread[] threadArr;
 
    public static void main(String[] args) {
        // 5개의 쓰레드를 생성하는 서버를 생성한다.
        TcpIpServer server = new TcpIpServer(5);
        server.start();
    }
 
    public TcpIpServer(int num) {
        try {
            // 서버 소켓을 생성하여 7777번 포트와 바인딩.
            serverSocket = new ServerSocket(7777);
            System.out.println(getTime() + " 서버가 준비되었습니다.");
 
            threadArr = new Thread[num];
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
    public void start() {
        for (int i = 0; i < threadArr.length; i++) {
            threadArr[i] = new Thread(this);
            threadArr[i].start();
        }
    }
 
    @Override
    public void run() {
        while (true) {
            try {
                System.out.println(getTime() + " 가 연결 요청을 기다립니다.");
 
                Socket socket = serverSocket.accept();
                System.out.println(getTime() + " " + socket.getInetAddress()
                        + "로부터 연결요청이 들어왔습니다.");
 
                OutputStream out = socket.getOutputStream();
                DataOutputStream dos = new DataOutputStream(out);
 
                dos.writeUTF("[Notice] Test Message1 from Server");
                System.out.println(getTime() + " 데이터를 전송하였습니다.");
 
                dos.close();
                socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
 
    static String getTime() {
        String name = Thread.currentThread().getName();
        SimpleDateFormat f = new SimpleDateFormat("[hh:mm:ss]");
        return f.format(new Date()) + name;
    }
}

 
TcpIpClient.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
import java.io.DataInputStream;
import java.io.InputStream;
import java.net.Socket;
 
 
public class TcpIpClient {
    public static void main(String[] args) {
        try{
            String serverIp = "127.0.0.1";
 
            // 소켓을 생성하여 연결을 요청한다.
            System.out.println("서버에 연결중입니다. 서버IP : " + serverIp);
            Socket socket = new Socket(serverIp, 7777);
             
            // 소켓의 입력스트림을 얻는다.
            InputStream in = socket.getInputStream();
            DataInputStream dis = new DataInputStream(in);
             
            // 소켓으로부터 받은 데이터를 출력한다.
            System.out.println("서버로부터 받은 메세지 : " + dis.readUTF());
            System.out.println("연결을 종료합니다.");
             
            dis.close();
            socket.close();
            System.out.println("연결이 종료되었습니다.");
        }catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 
결과) 서버

[08:22:23]main 서버가 준비되었습니다.

[08:22:23]Thread-0 가 연결 요청을 기다립니다.

[08:22:23]Thread-1 가 연결 요청을 기다립니다.

[08:22:23]Thread-2 가 연결 요청을 기다립니다.

[08:22:23]Thread-3 가 연결 요청을 기다립니다.

[08:22:23]Thread-4 가 연결 요청을 기다립니다.

[08:22:27]Thread-0 /127.0.0.1로부터 연결요청이 들어왔습니다.

[08:22:27]Thread-0 데이터를 전송하였습니다.

[08:22:27]Thread-0 가 연결 요청을 기다립니다.


결과) 클라이언트

서버에 연결중입니다. 서버IP : 127.0.0.1

서버로부터 받은 메세지 : [Notice] Test Message1 from Server

연결을 종료합니다.

연결이 종료되었습니다.

728x90
반응형
:
Posted by mapagilove