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)(196)
- 001 ImJa TCP Client.png (38.1KB)(160)
- 002 ImJa TCP Client.png (37.5KB)(157)
- 003 ImJa TCP Client.png (34.3KB)(168)
- 004 ImJa TCP Client.png (55.2KB)(151)
- 005 ImJa TCP Client.png (50.7KB)(140)
- 006 ImJa TCP Client.png (65.7KB)(149)
- 007-ImJa-TCP-Client.png (93.1KB)(146)


