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로 서버 접속합니다. 이제 이클립스에서 프로그램을 직접 작성하겠습니다.


000 ImJa TCP Client.png

▲ TCP  서버 샘플을 작성하기 위해 tcpServerSample로 프로젝트를 생성합니다.


001 ImJa TCP Client.png

▲ 프로젝트가 생성되었습니다. 아래 글을 참고해서 jsch.jar과 imja.jar 라이브러리를 추가합니다.



002 ImJa TCP Client.png

▲ 필요한 라이브러리가 추가되었습니다. 이제 소스 코드를 작성하면 됩니다.


003 ImJa TCP Client.png

▲ src 폴더를 마오른쪽 버튼 클릭 후 New>>Class를 실행합니다. 샘플 객체 이름을 TcpServerSampleMain이라고 하겠습니다.


004 ImJa TCP Client.png

▲ TcpServerSampleMain 객체 프로그램 코드를 작성합니다.


005 ImJa TCP Client.png

▲ 소스 코드를 작성했으니 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이 되겠습니다.


006 ImJa TCP Client.png

▲ Ant 스크립트를 이용하여 소스 파일을 컴파일하고 ImJa 보드로 실행 파일을 전송합니다.


 

▲ ImJa 보드에서 예제 실행 파일을 실행합니다. 실행 방법은 위 이미지에서처럼 아래와 같이 입력하여 실행합니다.


  • ]# java -cp appTcpServerSample.jar tcpServerSample.TcpServerSampleMain


007-ImJa-TCP-Client.png

▲ TCP/IP 문자열 전송 프로그램을 이용하여 포트 번호 5555로 문자열을 전송하면 송수신하는 모습을 확인할 수 있습니다.


다음 시간에는 ImJa 보드에서 TCP/IP 클라이언트 예제 프로그램을 올리겠습니다.