ImJa 솔루션
ImJa 보드에서 TCP/IP 서버 예제 프로그램에 이어 클라이언트 프로그램을 작성해 보겠습니다. Java 언어만 사용하신 분이라면 아마도 이전 TCP/IP 서버 프로그램을 보면 코딩 방법이 생소하게 느꼈을지 모릅니다. 그리고 시리얼 예제를 함께 보면 TCP/IP 예제와 시리얼 통신 예제가 비슷하다는 것을 눈치 빠른 분이라면 알았을 지 모르겠네요.
이번 예제는 TCP/IP 클라이언트로 서버에게 1초마다 문자열을 전송하고, 서버로부터 수신된 데이터를 화면에 출력합니다. 프로그램 소스는 아래와 같습니다.
package tcpClientSample; import com.falinux.imja.Poll; import com.falinux.imja.TcpClient; import java.nio.ByteBuffer; public class TcpClientSampleMain extends TcpClient { private Poll poll; private final ByteBuffer readBuffer = ByteBuffer.allocateDirect(1024); private final ByteBuffer writeBuffer = ByteBuffer.allocateDirect(1024); public TcpClientSampleMain(String ip, int port) { super(ip, port); // Tcp클라이언트 오브젝트 생성 poll = new Poll(); // 통신 라이브러리 초기화 this.open(); // TCP open poll.rebuild(); // 통신 객체 목록 갱신 } public void run() { while (true) { poll.pollDoLoop(100); System.out.println("Write..."); writeBuffer.put("falinux.com".getBytes()); // 문자열을 송신 버퍼에 설정 writeBuffer.flip(); // wirte buffer데이터 설정 this.write(writeBuffer); // 데이터 전송 writeBuffer.compact(); // bytebuff 포지션 재설정 try { Thread.sleep( 1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } @Override public int onDisconnect(long arg0) { return 0; } @Override public int onError(long arg0) { return 0; } @Override public int onHup(long arg0) { return 0; } @Override public int onRead(long arg0) { int readBytes = this.read(readBuffer); // 수신된 데이터 읽기 byte[] buf = new byte[readBytes]; // byte배열 선언 readBuffer.flip(); // 읽은 데이터 설정 readBuffer.get(buf); // byte배열 데이터 설정 readBuffer.compact(); // bytebuff포지션 재설정 System.out.println("Read: " + new String(buf)); // 받은 데이터 문자열 출력 return readBytes; } @Override public int onTimeOut(long arg0) { return 0; } @Override public int onWrite(long arg0) { return 0; } public static void main(String[] args) { new TcpClientSampleMain( "127.0.0.1", 5555).run(); } }
프로그램 예제의 main()을 보시면 127.0.0.1에 포트 번호는 5555로 서버 접속합니다. 이제 이클립스에서 프로그램을 직접 작성하겠습니다.
▲ 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=appTcpClientSample #upload target info target.ip=192.168.2.75 target.id=root target.pw=falinux target.dir=/home
build.propertyiies를 보면 생성할 실행 파일 이름은 appTcpClientSample이고 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 Client.png (34.8KB)(146)
- 001 ImJa TCP Client.png (38.1KB)(109)
- 002 ImJa TCP Client.png (37.5KB)(108)
- 003 ImJa TCP Client.png (34.3KB)(118)
- 004 ImJa TCP Client.png (55.2KB)(101)
- 005 ImJa TCP Client.png (50.7KB)(92)
- 006 ImJa TCP Client.png (65.7KB)(100)
- 007-ImJa-TCP-Client.png (93.1KB)(97)