SHOSHIN株式会社 昌新
製品カタログお知らせ会社案内所在地・地図求人案内
JapaneseEnglish
LANTRONIX デバイスサーバー 内蔵ウェブサーバの利用方法


LantronixデバイスサーバTOP-お問い合わせ-資料請求フォーム

LANTRONIX デバイスサーバー 内蔵ウェブサーバの利用方法


UDS/CoBox ファミリーのデバイスサーバにはウェブサーバが内蔵されており,HTML文書や画像,
そしてJavaアプレットを保存し,読み出すことが可能です.
ここでは,UDS/CoBoxのウェブサーバの利用方法を解説しています.


UDS/CoBox 内蔵ウェブサーバの利用方法


始めに:
UDS/CoBox ファミリーのデバイスサーバにはウェブサーバが内蔵されており,HTML文書や画像,そしてJavaアプレットを保存し,読み出すことが可能です.ここでは,UDS/CoBoxのウェブサーバの利用方法を解説しています.

一般にウェブサーバーはウェブブラウザからアクセスされ,HTML文書やファイルを配信するほか,CGIにより作られたウェブページの送出を行います.UDS/CoBoxに内蔵されたウェブサーバは,GETとHEADメソッドのみをサポートし,ウェブブラウザに固定的なHTML文書やファイル(Javaアプレットなど)を供給することのみをサポートしています.


実装:
UDS/CoBoxのウェブサーバはGETとHEADメソッドのみをサポートします.POSTメソッドはサポートしておらず,CGIの機能も持っていません.ウェブブラウザからデバイスサーバのシリアルポートにアクセスするアプリケーションでは,Javaアプレットを使用します.

ユーザーは後ほど説明するツール"web2cob.exe"を使って,独自に作成したウェブページをUDS/CoBoxデバイスサーバに書き込むことができます.UDS/CoBoxデバイスサーバには,ウェブサーバのために512KBのフラッシュメモリが確保されており,6つの64KBの領域に分けられています.それら6つの領域はそれぞれWEB1からWEB6までのウェブサイト(ウェブエリア)として機能します.

ウェブブラウザからGETやHEADのリクエストが送られてくると,UDS/CoBoxのウェブサーバはまずウェブエリアWEB1のファイルを参照します.もし,WEB1にファイルが見つからないとWEB2,WEB3を順次参照します.ファイルが見つかると,それがウェブブラウザに送られます.

LANTRONIXのUDS/CoBox設定用ウェブページはWEB6に書き込まれています.ウェブエリアWEB6は最後に参照されますから,ユーザーはより低い番号のウェブエリア(WEB1〜WEB5)にファイルを書き込むことで,ウェブブラウザにそのファイルを送ることができます.

UDS/CoBoxのウェブサーバは,そのそれぞれのウェブエリアに正しいファイルが書き込まれているか知る必要があります."web2cob.exe"はHTML文書やファイルの圧縮アーカイブを作成しますが,その際にマジックナンバーを付加します.ウェブサーバはそのマジックナンバーを見て,正しいファイルが書き込まれているかを確認します.

それぞれのウェブエリアは64MBに仕切られていますから,64MBを越えるウェブサイト,すなわち.COBファイルをロードすることはできません.このサイズにおさまるように.COBファイルを作成する必要があります.


ウェブページの作成:
HTML文書やJavaアプレットの作成のための本や道具はいろいろなものが市販されていますのでそれらを参照ください.その作成手順についての解説はこの文書の目的とするところではありません.しかし,手順を理解していただくために,簡単な参考例を示します.

簡単なHTMLファイルを作るには,テキストエディタを使うこともできます.テキストエディタを使い,次の行を含む文書を作成し,t1.html ファイルとして保存してください.



<HTML>
<BODY>
Hello World!
</BODY>
</HTML>




このファイルをテストするには,今セーブしたフィアルをウェブブラウザで開きます.





.COBファイルの作成:
作成したファイルをUDS/CoBoxのフラッシュメモリに書き込むためには,
事前に指定されたファイル形式に圧縮する必要があります.
これにはLANTRONIXから供給するツール web2cob.exe を使用します.

文法: Web2cob.exe /d <ディレクトリ> /o <出力ファイル名>
"ディレクトリ" は,.COBアーカイブに含めるファイルのおかれているディレクトリへのパス
"出力ファイル名" は作成する.COBアーカイブのファイル名
例:
Web2cob /d myfiles /o web3.cob

.COB ファイルを作成するには,次の手順をとります:

1. まず,作業用ディレクトリを作成します.
a. C:> mkdir \web
2. LANTRONIXの供給する2つのファイルをそのディレクトリに書き込みます.
a. C:> copy web2cob.exe \web
b. C:> copy mimetype.ini \web
3. 作成したディレクトリの下にディレクトリを作成します
a. C:> mkdir \web\source
4. HTML 文書を \web\source ディレクトリにコピーします
a. C:> copy t1.html \web\source
5. .COB ファイルを作成します
a. C:> cd \web
b. C:> web2cob /d source /o web1.cob
6. ファイルサイズが 64KB を越えていないことを確認します
a. C:> dir web1.cob





.COBファイルのデバイスサーバへのダウンロード
.COBファイルをUDS/CoBoxデバイスサーバにダウンロードするには,tftpクライエントプログラムあるいはLANTRONIXのユティリティであるデバイスインストーラを使用します.ここでは,Windows2000やWindowsNTに付属しているtftpクライエントを使ってダウンロードする方法を説明します.

.COBファイルをWindowsのtftpクライエントを使い,UDS/CoBoxデバイスサーバにロードする手順は次の通りです:

1. Windows XP, 2000 あるいは NTにおいて,次のようにコマンドを実行します
a. C:> tftp -i xxx.xxx.xxx.xxx PUT \web\web1.cob WEB1
注意: xxx.xxx.xxx.xxx をCoBox/UDSの IP アドレスに置き換えてください



これで,次のURLを使って,新しいウェブページにアクセスできるようになりました.

http://xxx.xxx.xxx.xxx/t1.html
ここで, xxx.xxx.xxx.xxx は UDS/CoBoxデバイスサーバの IP アドレスです





Javaアプリケーションからデバイスサーバに接続する
デバイスサーバに接続されたシリアルデバイスと通信するJavaアプリケーションを書くのは難しくありません.
ただ,Javaのプログラミングの知識と,Javaのコンパイラが必要になります.

ほかのネットワークアプリケーションと同様に,UDS/CoBoxデバイスサーバとネットワークを経由して通信するには,
まず通信チャンネルをオープンしなければなりません.この例では,ソケットをオープンし,
データを送信受信するための2つのデータストリームを作成します.次の例では新しいJavaクラス "tcpip" を使っています.
次のソースコードをファイル名 tcpip.Java として保存してください.

import java.*;
import java.lang.*;
import java.net.*;
import java.util.*;
import java.io.*;/* 
 * This class opens a TCP connection, and allows reading and writing of byte arrays.
 */

public class tcpip
{
	protected Socket s = null;
	public DataInputStream dis = null;
	protected DataOutputStream dos = null;
			
	public tcpip(InetAddress ipa, int port)
	{
		Socket s1 = null;
try {// Open the socket
			s1 = new Socket(ipa.getHostAddress(), port);
		}		
catch (IOException e) { 
			System.out.println("Error opening socket"); 
			return;
		}
		s = s1;
		try {// Create an input stream
			dis = new DataInputStream(
new BufferedInputStream(s.getInputStream()));
		}	  
		catch (Exception ex) {
			System.out.println("Error creating input stream");
		}
		try {// Create an output stream
			dos = new DataOutputStream(
new BufferedOutputStream(s.getOutputStream()));
		}
		catch (Exception ex) {
			System.out.println("Error creating output stream");
		}
	}

	public synchronized void disconnect()
	{
		if (s != null) {
			try {
				s.close();
			}		
	    		catch (IOException e){ }
		}	
	}

	public synchronized void send(byte[] temp)
	{
		try {
			dos.write(temp, 0, temp.length);
			dos.flush();
		}
		catch(Exception ex) {
		    System.out.println("Error sending data : " + ex.toString());
		}
	}

	public synchronized byte[] receive()
	{
		byte[] retval = new byte[0];
	
		try {
			while(dis.available() == 0);/* Wait for data */
		}
		catch (IOException e){ }
		try {
			retval = new byte[dis.available()];
		} catch (IOException e){ }
		try {
			dis.read(retval);
		} catch (IOException e){ }
		return(retval);
	}
		
	public synchronized void send(String given)
	{// WARNING: this routine may not properly convert Strings to bytes
		int length = given.length();
		byte[] retvalue = new byte[length];
		char[] c = new char[length];
		given.getChars(0, length, c, 0);
		for (int i = 0; i < length; i++) {
			retvalue[i] = (byte)c[i];
		}
		send(retvalue);    
	}
}


次に tcpip クラスを使う実際のアプレットを作成します.
次のコードをファイル "Test.Java"として保存してください.



import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;
import java.net.*;
import java.io.*;
import java.lang.*;
import java.text.*;
import java.util.*;


public class Test extends Applet
{
	static private boolean isapplet = true;
	static private InetAddress arg_ip = null;
	static private int arg_port = 0;
public tcpip gtp = null;; 
	InetAddress reader_ip = null;
	int port = 10001;

	public void init()
	{
		gtp = null;
		reader_ip = null;
		port = 10001;		
	}
	
	public void start()
	{
		add(new Label("TCP/IP connection test"));
                  /* Either get the IP address from the HTTP server if we're
				   an applet, or from the commandline (if passed). */
		if (isapplet) {
			try {
				reader_ip = InetAddress.getByName(getCodeBase().getHost());
			}
			catch (UnknownHostException e){ }
		}
		else {
			reader_ip = arg_ip;
			if (arg_port != 0) {
				port = arg_port;
			}	
		}/* Open a socket to the device server's serial port */
		if (reader_ip != null) {
			if (gtp == null) {
				gtp = new tcpip(reader_ip, port);
				if (gtp.s == null) {
					add(new Label("Connection FAILED!"));
					return;
				}
			}
		}
		if (gtp == null) {
			add(new Label("Not Connected"));
			return;
		}
		add(new Label("Connected"));/* ADD YOUR CODE HERE *
                  /* You may now perform IO with the Device Server via
					 *	gtp.send(byte[] data_out);
					 *	byte[] data_in = gtp.receive();
					*/
	}

	public void destroy()
	{
		if (gtp != null)
			gtp.disconnect();
		gtp = null;
	}
	
	public void stop() {
	}	
	
public static void main(String[] args) {
		Frame frame = new Frame("TCP/IP Test");
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
		if (args.length > 0) {
			try{
				arg_ip = InetAddress.getByName(args[0]);
			}
			catch (UnknownHostException e){}
			if (args.length > 1) {
				try {
					arg_port = Integer.valueOf(args[1]).intValue();
				}
				catch (NumberFormatException e) {}
			}
		}
		Test ap = new Test();
		frame.add(ap);
		ap.init();
		isapplet = false;
		ap.start();
frame.pack();
		frame.show();
	}
}


次に,start()ルーチンにある/* ADD YOUR CODE HERE */ にあなたのアプリケーションを加えます(上記の例では,デバイスサーバへの接続を作りますが,データの転送は行いません). シリアルデバイスへのデータの転送には gtp.send() を,シリアルデバイスからのデータの読み込みには gtp.receive() を使います.

文法:
	gtp.send(byte[] array)
	byte[] array = gtp.receive()
ここで,Javaのソースコードをクラスファイルにコンパイルします.


	C:> Javac tcpip.Java
	C:> Javac Test.Java

Javaアプリケーションをテストします.

	C:> Java Test xxx.xxx.xxx.xxx 10001

 
ここで xxx.xxx.xxx.xxx がUDS/CoBoxデバイスサーバの IP アドレスですであり,
10001 がリッスンしている TCP ポート番号です(10001 は初期設定値).



“TCP/IP connection test Connected”の小さなウィンドウが開くはずです.



もし,Connectedではなく"FAILED"と表示されたら,TCP接続に失敗したことを意味します.IPアドレスやポート番号に誤りがないか確かめてください.もし,"Not Connected"と応答してきたら無効なIPアドレスを指定した可能性があります.

デバイスサーバに接続できるようになり,Javaアプリケーションのデバッグを完了したら,アプレットとして今作成したJavaアプリケーションを含むHTML文書を作成します.次のHTML文書を"test.html"として保存してください.


<HTML>
<BODY>
<CENTER>
<APPLET CODE="Test.class" WIDTH="400" HEIGHT="200"></APPLET>
</CENTER>
</BODY>
</HTML>


ここで,JavaのクラスとこのHTML文書を\web\source ディレクトリにコピーします.
C:> copy *.class \web\source
C:> copy test.html \web\source
新しい .COB ファイルを作成し,tftpで UDS/CoBoxデバイスサーバにロードします.
C:> cd \web
C:> web2cob /d source /o web1.cob
C:> tftp -i xxx.xxx.xxx.xxx PUT \web\web1.cob WEB1


これで,新しく作成したウェブページ test.html にブラウザからアクセスできるようになりました.
http://xxx.xxx.xxx.xxx/test.html
ここで, xxx.xxx.xxx.xxx はUDS/CoBoxデバイスサーバの IP アドレスです.



まとめ:
UDS/CoBoxデバイスサーバ ファミリーはHTML文書,ファイル,画像やJavaアプレットの保存と取り出しに利用できるウェブサーバを内蔵しています.ウェブのプログラミングの知識をお持ちであれば,ほんの少しの作業でUDS/CoBoxデバイスサーバに接続されたシリアルデバイスと相互通信するウェブページを作ることができるでしょう.これにより,ユーザーは使い慣れたウェブブラウザとネットワークを通してシリアルデバイスを操作したり,シリアルデバイスから情報を得たりできるようになります.内蔵ウェブブラウザ機能は,LANTRONIX UDS/CoBoxデバイスサーバの応用範囲を無限に広げることでしょう.


(c) Copyright 2002, 株式会社 昌新 情報システム営業部
原典:Utilizing the CoBox Family Web Server, Draft 04 9/10/02
改定:2003年1月22日



 




TOP製品カタログお知らせ会社案内所在地・地図求人案内

copyright (C) Shoshin Corporation  All Rights Reserved.