yoni
[33][Network] 서버로 전송된 현재 온도를 파일로 저장하고 읽어오는 네트워크 프로그램 제작 본문
java of educational by contents
[33][Network] 서버로 전송된 현재 온도를 파일로 저장하고 읽어오는 네트워크 프로그램 제작
yoni-1117 2018. 12. 15. 13:221. Server
- 수집되는 온도를 파일로 출력하는 프로그램을 제작하세요.
- 수집되는 온도의 범위는 -5도 ~ 5도
- 온도 수집은 3초에 한번씩 전송 되도록 합니다. Thread 이용
Thread.sleep(3000); // 3초간 실행 중지
[실행 화면]
접속자를 기다리는 중입니다.
- 수집되는 온도의 범위는 -5도 ~ 5도
- 온도 수집은 3초에 한번씩 전송 되도록 합니다. Thread 이용
Thread.sleep(3000); // 3초간 실행 중지
- bw.write(String.valueOf(temp)): 전송시 문자열로 변경하여 전송합니다.
- bw.newLine(): Enter를 전송하여 readLine() 메소드를 작동하게합니다.
[실행 화면]
접속자를 기다리는 중입니다.
[접속 IP] 172.16.7.250
-4
-1
-1
0
0
1
-2
2
-5
데이터 수집을 종료합니다.
새로운 위치에서 데이터를 수신 준비합니다.
▷ network.CollectServer.java
java network.CollectServer
-----------------------------------------------------------------------------------
package network;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.StringTokenizer;
public class CollectServer {
public static void main(String[] args) {
ServerSocket server = null; // client의 접속 요청을 처리
Socket socket = null; // 데이터 송수신
InetAddress inet = null; // 접속 정보
InputStream is = null; // 네트워크 수신
InputStreamReader isr = null; // 수신된 코드를 한글로 변환
BufferedReader br = null; // 메모리에 기록
try {
server = new ServerSocket(2010); // 2010
while(true) { // 무한 루틴
System.out.println("접속자를 기다리는 중입니다.");
socket = server.accept(); // 대기중
inet = socket.getInetAddress();
System.out.println("접속된 Client IP: " + inet.getHostAddress());
br = new BufferedReader(new InputStreamReader( ..... ));
while(true) {
String line = ..... ;
if (line == null) {
System.out.println("온도 수집을 종료합니다.");
System.out.println();
break;
} else {
System.out.println(line); // 수집된 온도를 출력
}
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
br.close();
} catch(Exception e) {
}
try {
socket.close();
} catch(Exception e) {
}
try {
server.close();
} catch(Exception e) {
}
} }
}
-> 답
package network;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.StringTokenizer;
public class CollectServer {
public static void main(String[] args) {
ServerSocket server = null; // client의 접속 요청을 처리
Socket socket = null; // 데이터 송수신
InetAddress inet = null; // 접속 정보
InputStream is = null; // 네트워크 수신
InputStreamReader isr = null; // 수신된 코드를 한글로 변환
BufferedReader br = null; // 메모리에 기록
try {
server = new ServerSocket(2010); // 2010
while(true) {// 무한루틴: 다른 사용자가 들어오게 된다면 막을수가 없다 쓰레드를 사용하지 않았을때 전형적인 문제점이다 클라이언트가 서버를 점유하게 되는 전형적인 버그가 생긴다
System.out.println("접속자를 기다리는 중입니다.");
socket = server.accept(); // 대기중
inet = socket.getInetAddress();
System.out.println("접속된 Client IP: " + inet.getHostAddress());
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while(true) {
String line = br.readLine();
if (line == null) {
System.out.println("온도 수집을 종료합니다.");
System.out.println();
break;
} else {
System.out.println(line); // 수집된 온도를 출력
}
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
br.close();
} catch(Exception e) {
}
try {
socket.close();
} catch(Exception e) {
}
try {
server.close();
} catch(Exception e) {
}
}
}
}
-----------------------------------------------------------------------------------
2. Client
- 영하 5도이면 수집을 종료합니다.
- 영하 5도이면 수집을 종료합니다.
▷ network.CollectClient.java
java network.CollectClient 127.0.0.1 2010
java network.CollectClient 127.0.0.1 2010
-----------------------------------------------------------------------------------
->답
package network;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Random;
public class CollectClient {
public static void main(String[] args) {
Socket socket = null; // 데이터 송수신
InetAddress inet = null; // 접속 정보
OutputStream os = null; // 네트워크 전송
OutputStreamWriter osw = null; // 출력시 한글을 코드로 변환 처리
BufferedWriter bw = null; // 출력할 데이터를 메모리에 저장
try {
socket = new Socket(args[0], Integer.parseInt(args[1])); // 서버에 연결 요청, ip, port
inet = socket.getInetAddress();
System.out.println("접속된 Server IP: " + inet.getHostAddress());
bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
while(true) {
Thread.sleep(3000);
Random rnd = ..... ;
int temp = rnd.nextInt(11) - 5; // 0 ~ 10 -> -5 ~ 5
System.out.println("온도: " + temp);
bw.write(String.valueOf(temp)); // int -> String
bw.newLine(); // 2개 이상의 문장 전송
bw.flush(); // 네트워크로 전송
if (temp == -5) {
System.out.println("데이터 수집을 종료합니다.");
break;
}
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
try {
bw.close();
} catch(Exception e) {
}
try {
socket.close();
} catch(Exception e) {
}
}
}
}
->답
package network;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Random;
public class CollectClient {
public static void main(String[] args) {
Socket socket = null; // 데이터 송수신
InetAddress inet = null; // 접속 정보
BufferedWriter bw = null; // 출력할 데이터를 메모리에 저장
try {
socket = new Socket(args[0], Integer.parseInt(args[1])); // 서버에 연결 요청, ip, port
inet = socket.getInetAddress();
System.out.println("접속된 Server IP: " + inet.getHostAddress());
bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
while(true) {
Thread.sleep(3000);
Random rnd = new Random();
int temp = rnd.nextInt(11) - 5; // 0 ~ 10 -> -5 ~ 5
System.out.println("온도: " + temp);
bw.write(String.valueOf(temp)); // int -> String
bw.newLine(); // 2개 이상의 문장 전송
bw.flush(); // 네트워크로 전송
if (temp == -5) {
System.out.println("데이터 수집을 종료합니다.");
break;
}
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
try {
bw.close();
} catch(Exception e) {
}
try {
socket.close();
} catch(Exception e) {
}
}
}
}
-----------------------------------------------------------------------------------
[02] 서버로 전송된 현재 온도를 파일로 저장하고 읽어오는 네트워크 프로그램 제작
1) 파일 쓰기 과정
- String fileName -> FileWriter -> PrintWriter -> pw.println("") -> pw.flush();
- pw.print(""): 파일 기록후 라인 변경 안함.
- pw.println(""): 파일 기록후 라인 변경함.
- java.io.FileNotFoundException: 폴더나 파일이 없거나 틀린 경우
2) FileWriter(파일명, 추가 여부) 클래스의 옵션
- 파일이 없으면 파일을 자동으로 생성합니다. 폴더는 생성하지 않습니다.
- false: 기존 내용을 전부 삭제 후 새로운 내용으로 변경합니다.
- true: 기존 내용에 새로운 내용을 이어서 뒤쪽에 추가합니다.
1. Server
- 수집되는 온도를 파일로 출력하는 프로그램을 제작하세요.
- 수집되는 온도의 범위는 -5도 ~ 5도
- 온도 수집은 3초에 한번씩 전송 되도록 합니다. Thread 이용
Thread.sleep(3000); // 3초간 실행 중지
[실행 화면]
접속자를 기다리는 중입니다.
- 수집되는 온도의 범위는 -5도 ~ 5도
- 온도 수집은 3초에 한번씩 전송 되도록 합니다. Thread 이용
Thread.sleep(3000); // 3초간 실행 중지
- bw.write(String.valueOf(temp)): 전송시 문자열로 변경하여 전송합니다.
- bw.newLine(): Enter를 전송하여 readLine() 메소드를 작동하게합니다.
[실행 화면]
접속자를 기다리는 중입니다.
[접속 IP] 172.16.7.250
-4
-1
-1
0
0
1
-2
2
-5
데이터 수집을 종료합니다.
새로운 위치에서 데이터를 수신 준비합니다.
(위와 다르게 데이터를 file로 저장함)
▷ network.CollectServer2.java
java network.CollectServer2
-----------------------------------------------------------------------------------
package network;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;
import java.util.StringTokenizer;
public class CollectServer2 {
public static void main(String[] args) {
ServerSocket server = null; // client의 접속 요청을 처리
Socket socket = null; // 데이터 송수신
InetAddress inet = null; // 접속 정보
InputStream is = null; // 네트워크 수신
InputStreamReader isr = null; // 수신된 코드를 한글로 변환
BufferedReader br = null; // 메모리에 기록
File file = null; // 온도 저장 파일
// PrintWriter -> FileWriter -> File
FileWriter writer = null; // 파일에 기록
PrintWriter pw = null; // 메모리에 기록
try {
file = new File("C:/ai3/io/temperature.txt");
server = new ServerSocket(2010); // 2010
while(true) { // 무한 루틴
System.out.println("접속자를 기다리는 중입니다.");
socket = server.accept(); // 대기중
inet = socket.getInetAddress();
System.out.println("접속된 Client IP: " + inet.getHostAddress());
br = new BufferedReader(new InputStreamReader( ..... ));
// false: 기존 내용을 지우고 기록, true: 파일 하단에 추가
writer = new FileWriter(file, true); // 파일이 추가
pw = new PrintWriter(writer);
pw.println("----------------------------------------------");
pw.println("현재 온도 수신 센서 위치: " + inet.getHostAddress());
pw.println("수집 시작 시간: " + new Date().toLocaleString());
pw.println("----------------------------------------------");
while(true) {
String line = ..... ;
if (line == null) {
System.out.println("온도 수집을 종료합니다.");
System.out.println();
break;
} else {
System.out.println(line); // 수집된 온도를 출력
..... // 파일에 기록
}
}
pw.println("----------------------------------------------");
pw.println("수집 종료 시간: " + new Date().toLocaleString());
pw.println("----------------------------------------------");
pw.println();
try {
pw.close();
} catch(Exception e) {
}
try {
writer.close();
} catch(Exception e) {
}
try {
br.close();
} catch(Exception e) {
}
try {
socket.close();
} catch(Exception e) {
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
server.close();
} catch(Exception e) {
}
}
}
}
->답
package network;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;
import java.util.StringTokenizer;
public class CollectServer2 {
public static void main(String[] args) {
ServerSocket server = null; // client의 접속 요청을 처리
Socket socket = null; // 데이터 송수신
InetAddress inet = null; // 접속 정보
InputStream is = null; // 네트워크 수신
InputStreamReader isr = null; // 수신된 코드를 한글로 변환
BufferedReader br = null; // 메모리에 기록
File file = null; // 온도 저장 파일
// PrintWriter -> FileWriter -> File
FileWriter writer = null; // 파일에 기록
PrintWriter pw = null; // 메모리에 기록
try {
file = new File("C:/ai3/io/temperature.txt");
server = new ServerSocket(2010); // 2010
while(true) { // 무한 루틴
System.out.println("접속자를 기다리는 중입니다.");
socket = server.accept(); // 대기중
inet = socket.getInetAddress();
System.out.println("접속된 Client IP: " + inet.getHostAddress());
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
// false: 기존 내용을 지우고 기록, true: 파일 하단에 추가
writer = new FileWriter(file, true); // 파일이 추가
pw = new PrintWriter(writer);
pw.println("----------------------------------------------");
pw.println("현재 온도 수신 센서 위치: " + inet.getHostAddress());
pw.println("수집 시작 시간: " + new Date().toLocaleString());
pw.println("----------------------------------------------");
while(true) {
String line = br.readLine();
if (line == null) {
System.out.println("온도 수집을 종료합니다.");
System.out.println();
break;
} else {
System.out.println(line); // 수집된 온도를 출력
pw.println(line);// 파일에 기록
}
}
pw.println("----------------------------------------------");
pw.println("수집 종료 시간: " + new Date().toLocaleString());
pw.println("----------------------------------------------");
pw.println();
try {
pw.close();
} catch(Exception e) {
}
try {
writer.close();
} catch(Exception e) {
}
try {
br.close();
} catch(Exception e) {
}
try {
socket.close();
} catch(Exception e) {
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
server.close();
} catch(Exception e) {
}
}
}
}
-----------------------------------------------------------------------------------
2. Client
- 영하 5도이면 수집을 종료합니다.
- 영하 5도이면 수집을 종료합니다.
▷ network.CollectClient2.java
java network.CollectClient2 172.16.12.1 2010
java network.CollectClient2 172.16.12.1 2010
-------------------------------------------------------------
3. 기록된 온도 파일
▷ C:/ai3/io/temperature.txt
-----------------------------------------------------------------------------------
4. 기록된 파일을 읽어오는 클래스
▷ network.ReadFile.java
package network;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Random;
public class CollectClient2 {
public static void main(String[] args) {
Socket socket = null; // 데이터 송수신
InetAddress inet = null; // 접속 정보
OutputStream os = null; // 네트워크 전송
OutputStreamWriter osw = null; // 출력시 한글을 코드로 변환 처리
BufferedWriter bw = null; // 출력할 데이터를 메모리에 저장
try {
socket = new Socket(args[0], Integer.parseInt(args[1])); // 서버에 연결 요청, ip, port
inet = socket.getInetAddress();
System.out.println("접속된 Server IP: " + inet.getHostAddress());
bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
while(true) {
Thread.sleep(3000);
.....
int temp = rnd.nextInt(11) - 5; // 0 ~ 10 -> -5 ~ 5
System.out.println("온도: " + temp);
bw.write(String.valueOf(temp)); // int -> String
bw.newLine(); // 2개 이상의 문장 전송
bw.flush(); // 네트워크로 전송
if (temp == -5) {
System.out.println("데이터 수집을 종료합니다.");
break;
}
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
try {
bw.close();
} catch(Exception e) {
}
try {
socket.close();
} catch(Exception e) {
}
}
}
}
->답
->답
package network;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Random;
public class CollectClient2 {
public static void main(String[] args) {
Socket socket = null; // 데이터 송수신
InetAddress inet = null; // 접속 정보
OutputStream os = null; // 네트워크 전송
OutputStreamWriter osw = null; // 출력시 한글을 코드로 변환 처리
BufferedWriter bw = null; // 출력할 데이터를 메모리에 저장
try {
socket = new Socket(args[0], Integer.parseInt(args[1])); // 서버에 연결 요청, ip, port
inet = socket.getInetAddress();
System.out.println("접속된 Server IP: " + inet.getHostAddress());
bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
while(true) {
Thread.sleep(3000);
Random rnd = new Random();
int temp = rnd.nextInt(11) - 5; // 0 ~ 10 -> -5 ~ 5
System.out.println("온도: " + temp);
bw.write(String.valueOf(temp)); // int -> String
bw.newLine(); // 2개 이상의 문장 전송
bw.flush(); // 네트워크로 전송
if (temp == -5) {
System.out.println("데이터 수집을 종료합니다.");
break;
}
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
try {
bw.close();
} catch(Exception e) {
}
try {
socket.close();
} catch(Exception e) {
}
}
}
}
-------------------------------------------------------------
3. 기록된 온도 파일
▷ C:/ai3/io/temperature.txt
-----------------------------------------------------------------------------------
----------------------------------------------
현재 온도 수신 센서 위치: 172.16.7.250
수집 시작 시간: 2015. 7. 28 오후 9:36:54
----------------------------------------------
-4
-1
-1
0
0
1
-2
2
-5
----------------------------------------------
수집 종료 시간: 2015. 7. 28 오후 9:37:12
----------------------------------------------
----------------------------------------------
현재 온도 수신 센서 위치: 172.16.7.250
수집 시작 시간: 2015. 7. 28 오후 9:37:57
----------------------------------------------
-1
5
-2
-3
-1
-5
----------------------------------------------
수집 종료 시간: 2015. 7. 28 오후 9:38:43
----------------------------------------------
-----------------------------------------------------------------------------------
4. 기록된 파일을 읽어오는 클래스
▷ network.ReadFile.java
-----------------------------------------------------------------------------------
package network;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class ReadFile {
public static void main(String[] args) {
File file = new File("C:/ai3/io/temperature.txt");
// File -> FileReader -> BufferedReader
BufferedReader br = null; // 읽은 내용을 메모리에 저장
try {
br = new BufferedReader(new FileReader( ..... )); // Call By Reference, 해시코드 전달
while(true) {
String line = ..... ; // 파일에서 한 라인씩 읽음
if (line == null) { // 파일 마지막인지 검사
break;
} else {
System.out.println(line); // 화면 출력
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
br.close();
} catch(Exception e) {
}
}
}
}
->답
package network;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class ReadFile {
public static void main(String[] args) {
File file = new File("C:/201812_java/io/temperature.txt");
// File -> FileReader -> BufferedReader
BufferedReader br = null; // 읽은 내용을 메모리에 저장
try {
br = new BufferedReader(new FileReader(file)); // Call By Reference, 해시코드 전달
while(true) {
String line = br.readLine(); // 파일에서 한 라인씩 읽음
if (line == null) { // 파일 마지막인지 검사
break;
} else {
System.out.println(line); // 화면 출력
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
br.close();
} catch(Exception e) {
}
}
}
}
-----------------------------------------------------------------------------------
'java of educational by contents' 카테고리의 다른 글
[35][JDBC] 데이터베이스 개론, MySQL 5.6 Potable(개발자 유형)설치, 한글 깨짐 처리 (0) | 2018.12.15 |
---|---|
[34][Network] Runnable 인터페이스 기반 파일 전송, Client (0) | 2018.12.15 |
[32][Network] Thread 문자열 전송 기반의 1:1 채팅 서버/클라이언트 (0) | 2018.12.15 |
[31][Network] Thread SYNCHRONIZED 동기화 처리 (0) | 2018.12.09 |
[30][Network] Thread의 이용 (0) | 2018.12.09 |
Comments