2013. 3. 28. 11:24
안드로이드 - 소켓 프로그래밍 (TCP/IP) Server&Client 예제 (쓰레드 활용) 안드로이드 이야기2013. 3. 28. 11:24
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();
}
}
}
결과) 서버
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; } } |
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
반응형
'안드로이드 이야기' 카테고리의 다른 글
안드로이드 - 소켓통신 (0) | 2013.03.28 |
---|---|
안드로이드 - DB file을 assets디렉토리에서 폰으로 복사 이동하는 예제 (0) | 2013.03.28 |
안드로이드 - 전화번호부 관리 프로그램 (0) | 2013.03.28 |
안드로이드 - Android에서의 TCP/IP 통신 (1) | 2013.03.28 |
안드로이드 - Tcp/ip를 통한 외부 DB데이터 처리 (0) | 2013.03.28 |