ImJa 솔루션
ImJa 보드는 Java 언어만으로 TCP/IP, UDP/IP, 시리얼, UDS 등 다양한 통신 프로그램을 작성할 수 있습니다만, 함께 제공되는 ImJa 라이브러리를 이용하면 더욱 간결하고 생산성이 높은 통신 프로그램을 작성할 수 있습니다. ImJa 보드에서 어떤 방식으로 통신 프로그램을 작성하는지 예제를 통해 설명하겠습니다.
본 글에서 소개하는 TCP/IP 서버 프로그램은 수신된 문자열을 화면에 출력하고 반환하는 에코 프로그램입니다. 프로그램 소스는 아래와 같습니다.
package tcpServerSample; import com.falinux.imja.Poll; import com.falinux.imja.Tcp; import com.falinux.imja.TcpServer; import java.nio.ByteBuffer; public class TcpServerSampleMain implements Runnable { private Poll poll; private TcpServer tcpServer; private final ByteBuffer readBuffer = ByteBuffer.allocateDirect(1024); private final ByteBuffer writeBuffer = ByteBuffer.allocateDirect(1024); class TcpC extends Tcp { @Override public long open() { return 0; } @Override public int onRead(long handle) { System.out.print("Read from client:"); int readBytes = this.read(readBuffer); // 받은 데이터 읽기 byte[] buf = new byte[readBytes]; // byte배열 선언 readBuffer.flip(); // 읽은 데이터 설정 readBuffer.get(buf); // byte배열에 데이터 설정 readBuffer.compact(); // bytebuff 포지션 재설정 writeBuffer.put(buf); // 수신된 데이터를 write buffer에 설정 writeBuffer.flip(); // write buffer 데이터 설정 this.write(writeBuffer); // 데이터 전송 writeBuffer.compact(); // bytebuff포지션 재설정 System.out.println(new String(buf, 0, readBytes)); return readBytes; } @Override public int onWrite(long handle) { return 0; } @Override public int onError(long handle) { return 0; } @Override public int onHup(long handle) { return 0; } @Override public int onTimeOut(long handle) { return 0; } @Override public int onDisconnect(long handle) { return 0; } } public TcpServerSampleMain(int port, int clientCount) { poll = new Poll(); // 통신 라이브러리 초기화 tcpServer = new TcpServer(port, clientCount) { @Override public int onRead(long handle) { System.out.println("New client connected..."); return tcpServer.accept(new TcpC()); // 새로운 클라이언트 생성 } @Override public int onWrite(long handle) { return 0; } @Override public int onError(long handle) { return 0; } @Override public int onHup(long handle) { return 0; } @Override public int onTimeOut(long handle) { return 0; } @Override public int onDisconnect(long handle) { return 0; } }; } @Override public void run() { tcpServer.open(); // TCP서버 open poll.rebuild(); // 통신 객체 목록 갱신 while (true) { poll.pollDoLoop(100); } } public static void main(String[] args) { new TcpServerSampleMain(5555, 2).run(); } }
프로그램 예제의 main()을 보시면 TCP/IP 포트 번호는 5555로 사용하고 클라이언트는 동시에 2까지 접속할 수 있도록 했습니다. 이제 이클립스에서 프로그램을 직접 작성하겠습니다.
▲ TCP 서버 샘플을 작성하기 위해 tcpServerSample로 프로젝트를 생성합니다.
▲ 프로젝트가 생성되었습니다. 아래 글을 참고해서 jsch.jar과 imja.jar 라이브러리를 추가합니다.
▲ 필요한 라이브러리가 추가되었습니다. 이제 소스 코드를 작성하면 됩니다.
▲ src 폴더를 마오른쪽 버튼 클릭 후 New>>Class를 실행합니다. 샘플 객체 이름을 TcpServerSampleMain이라고 하겠습니다.
▲ TcpServerSampleMain 객체 프로그램 코드를 작성합니다.
▲ 소스 코드를 작성했으니 Build.xml과 build.propertyiies를 생성합니다. Build.xml과 build.propertyiies 내용은 아래와 같습니다.
>>> Build.xml
<?xml version="1.0" encoding="UTF-8"?> <!-- 프로젝트 이름을 입력한다. --> <project name= "ImJa_example" basedir= "."> <!-- 빌드 프로퍼티 파일 --> <property file= "build.properties" /> <!-- Java Compile--> <target name= "compile" description= "Compile!!!" depends= ""> <echo message="------------------------------" /> <echo message="Java Compile!!!! " /> <echo message="------------------------------" /> <javac target= "${java.target}" nowarn="true" deprecation="true" debug="true" listfiles="false" failonerror="true" optimize="false" includeantruntime="false" srcdir="${basedir}/src" destdir="${basedir}/bin" encoding="${java.compile.encoding}"> </javac> </target> <!-- make jar--> <target name= "make_jar_nfs" depends= "compile"> <echo message="------------------------------" /> <echo message=" Make Jar : ${jar.name}.jar" /> <echo message="------------------------------" /> <mkdir dir= "./jar" /> <jar destfile="${nfs.dir}/${jar.name}.jar" basedir="${basedir}/bin"> </jar> </target> <!-- target device upload--> <target name= "target_device_upload" depends= "make_jar_nfs"> <echo message="------------------------------" /> <echo message=" Target device Upload" /> <echo message="------------------------------" /> <scp file="${nfs.dir}/${jar.name}.jar" todir="${target.id}@${target.ip}:${target.dir}" password="${target.pw}" trust="true"/> </target> </project>
>>> build.propertyiies
# NFS folder nfs.dir=nfs #java encoding java.compile.encoding=UTF-8 #java compile version java.target=1.7 #java jar name jar.name=appTcpServerSample #upload target info target.ip=192.168.2.75 target.id=root target.pw=falinux target.dir=/home
build.propertyiies를 보면 생성할 실행 파일 이름은 appTcpServerSample이고 ImJa 보드의 IP는 192.168.2.75, 로그인 ID와 암호는 각각 root에 falinux이며, 실행 파일 저장 위치는 /home이 되겠습니다.
▲ Ant 스크립트를 이용하여 소스 파일을 컴파일하고 ImJa 보드로 실행 파일을 전송합니다.
▲ ImJa 보드에서 예제 실행 파일을 실행합니다. 실행 방법은 위 이미지에서처럼 아래와 같이 입력하여 실행합니다.
- ]# java -cp appTcpServerSample.jar tcpServerSample.TcpServerSampleMain
▲ TCP/IP 문자열 전송 프로그램을 이용하여 포트 번호 5555로 문자열을 전송하면 송수신하는 모습을 확인할 수 있습니다.
다음 시간에는 ImJa 보드에서 TCP/IP 클라이언트 예제 프로그램을 올리겠습니다.
- 000 ImJa TCP Server.png (36.3KB)(131)
- 001 ImJa TCP Server.png (38.1KB)(117)
- 002 ImJa TCP Server.png (36.7KB)(124)
- 003 ImJa TCP Server.png (40.4KB)(115)
- 004 ImJa TCP Server.png (55.3KB)(102)
- 005 ImJa TCP Server.png (52.1KB)(104)
- 006 ImJa TCP Server.png (62.0KB)(110)
- 007 ImJa TCP Server.png (62.5KB)(114)
- 008 ImJa TCP Server.png (132.3KB)(93)