글쓴이 :엄기덕 2000년 6월 30일 13:10:46
유닉스시스템에서 시리얼통신을 통하여 데이타를 받아
오라클db에 저장하는 프로그램을 작성하였습니다.
문제는 시리얼포트로 데이터가 끊임없이 들어오는데 반해 프로그램에서 처리를 바로바로 하지 못해서 유닉스가 프로세스를 죽이는 것이 문제입니다.(제 생각입니다..)
일부 소스를 올립니다..
해결책이 있으면 알려주세요...
------->여기 부터
import java.io.*;
import java.net.*;
import java.sql.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class StockData implements Runnable {
String str;
char STX=0x02; // Line의 시작표시문자
char ETX=0x03; // Line의 끝 표시문자
StockData(String buf){
str=buf;
}
public void run() {
System.out.println("111");
InsertDB(str);
// try{
// FileWriter fwriter = new FileWriter("stock111.txt");
//System.out.println("str :"+str);
// fwriter.write(str);
// } catch (IOException e){
// System.out.println("IOException error :"+e);
// }
// fwriter.close();
}
public static void main(String args[])
throws ServletException, IOException {
System.out.println("start main()");
try {
char STX=0x0002; // Line의 시작표시문자
char ETX=0x0003; // Line의 끝 표시문자
FileReader freader = new FileReader("/dev/tty0");
/*
FileReader freader = new FileReader("stock1.txt");
*/
FileWriter fwriter = new FileWriter("stock.txt");
String tmp=null,buf=null;
int i=0,s=0,t=0;
// 시리얼포트로 전송되는 데이터를 읽는다.
while ((i = freader.read()) != -1){
System.out.println("freader i :"+i);
System.out.println("freader (char)i :"+(char)i);
if((char)i==STX) {
System.out.println("data start");
s=0;
t=0;
tmp="";
buf="";
buf+=(char)i;
}
else if((char)i==ETX) {
System.out.println("data end");
buf+=(char)i;
buf+='\n';
fwriter.write(buf);
///////////////////////////////////////////////////쓰레드 생성
System.out.println("쓰레드 생성");
StockData sd = new StockData(buf);
Thread thrd = new Thread(sd);
if (thrd == null) {
System.out.println("쓰레드 생성실패");
System.exit(0);
}
thrd.start();
///////////////////////////////////////////////////쓰레드 생성
}
else{
// 읽은 자료가 "Z99..."이면 프로그램을 종료한다.
if(t<3&&((char)i=='Z'||(char)i=='9')) {
tmp+=(char)i;
if(t==3) {
tmp+='\0';
if(tmp.equals("Z99")) break;
}
}
buf+=(char)i;
}
} // end of while
freader.close();
fwriter.close();
} // end of try
catch (IOException e) {
System.out.println("IOException error :"+e);
}
}// End of main