Sockets パッケージの紹介
使い方
Sockets[function](arguments)
function(arguments)
use Sockets in ... end
|
説明
|
|
•
|
Sockets パッケージは、Maple 内でネットワークコミュニケーションを行うためのツールを集めたものです。このパッケージ内のルーチンは、(イントラネットまたはインターネットといった) ネットワーク上のリモートホストで実行されるプロセスに接続したり、このようなプロセスとの間でデータの交換を行うことを可能にします。特に、ネットワーク上にある異なるマシンで起動している、2 つの独立した Maple のプロセス同士でコミュニケーションをとることが可能です。
|
•
|
このパッケージは、確かな、コネクション指向の、インターネットドメイン (TCP/IP) におけるストリームソケットを、ユーザインタフェースに与えます。手続き Sockets[Open] を用いることで、リモートマシン上にあるサーバへ接続および通信することを可能にする、クライアントソケットの作成が可能です。また、手続き Sockets[Serve] を用いることで、他者が接続およびリクエストの作成を行える、計算サービスを提供することも可能になります。
|
•
|
Sockets パッケージは、そのプロセスが不要なメモリとして回収の対象になった場合、あるいは Maple の処理が通常の方法で終了される場合に、開かれた接続を自動的にシャットダウンします。しかし、ユーザが制御できない事態に陥った場合には(終了の場合を除く)、ソケットの接続が通常のようにシャットダウンされるとは考えないほうがよいでしょう。
|
|
|
Socket パッケージの関数へのアクセス
|
|
•
|
Sockets パッケージは、以下の手続きを出力します:
|
Address Close Configure GetHostName GetLocalHost
GetLocalPort GetPeerHost GetPeerPort GetProcessID HostInfo
LookupService Open ParseURL Peek Read
ReadBinary ReadLine Serve Status timeout
Write WriteBinary
•
|
Sockets パッケージ内にある各関数は、コマンドの呼び出し手順において、関数名の長い形と短い形のいずれを用いてもアクセスが可能です。
|
•
|
Sockets パッケージ内にある関数は、コマンドの呼び出し手順において、常に関数名の長い形によるアクセスが可能です。
|
|
例えば、開かれている TCP/IP の接続を終了するためには、次のような長い形の呼び出し手順を使用します:
|
|
Sockets[Close](arguments)
|
|
関数名の長い形は、その関数の短い形が with(Sockets, function) で事前に定義されていない場合や、パッケージ関数の全ての短い形が with(Sockets) で事前に定義されていない場合に必要となります。さらに、現在の Maple セッション内の他のオブジェクトで、Sockets パッケージ内の関数と同じ名前が使用されている場合には、Sockets['function'](arguments) というような未評価にする引用符を用いることで、Sockets 関数にアクセスすることが可能となります(名前 function の評価を行わせないために、引用符が必要となります)。
|
|
Sockets パッケージの実行の基礎となるのはモジュールであるため、パッケージから関数にアクセスする際には、Sockets:-function の形を用いることも可能です。記号 :- はその右辺を評価しないため、この形では未評価にする引用符を使用する必要がありません。ユーザが作成するプログラム内から Sockets ルーチンにアクセスする際には、この記号の使用を推奨します。これでユーザがプログラム文全体で予想したとおりの実行が得られるでしょう。詳細については、module を参照して下さい。
|
•
|
特定の Sockets 関数の短い形は、with(Sockets, function) が入力された後に、現在の Maple のセッション中で使用が可能になります。現在の Maple のセッション中で、全ての Sockets 関数の短い形を使用するためには、with(Sockets) コマンドを最初に入力して下さい。
|
|
例えば、with(Sockets) が既に入力されるものと仮定すると、以下の短い形の呼び出し手順を使用して、開かれている TCP/IP の接続を終了します。
|
•
|
これらのルーチンをプログラミングで使用する場合には、作成するコードを use 文で囲んでこのパッケージを結びつけることで、パッケージの出力にアクセスすることが可能となります(例: use Sockets in ... end use)。詳細については、use を参照して下さい。
|
•
|
このパッケージにあるルーチンで作成されるソケットの接続は全て、Sockets パッケージで局所的に用いる、Sockets:-socketID という形で出力される不明瞭な型で表現されます。type( expr, Sockets:-socketID ) を用いることで、ソケット番号について、式 exprが正しい構造を持っているかどうかを調べることが可能です(この場合、型は引用されてはならないことに注意して下さい)。
|
|
|
Sockets パッケージ内にある関数に関するヘルプの参照方法
|
|
特定の Sockets 関数に関するヘルプを表示するためには、次のコマンドのうちのいずれかを入力します (ここで function は上記の一覧から選択した名前を表す)。
|
?function (この場合、function は Maple で固有の名前でなくてはなりません。)
|
|
|
例
|
|
with を用いて、対話形式でアクセスできるパッケージの手続きを表示します。
| (5.1) |
ネットワーク上のどこにいるのかを検索します。
| (5.2) |
peer (このヘルプページで作成されるマシンのように、同じネットワーク上にある特定のマシン) 上にあるエコーサーバへ接続します。
>
|
sid := Open( "vulcan", "echo" );
|
| (5.3) |
peer にメッセージを送ります。
>
|
Write( sid, sprintf( "Hello from %s!\n", GetHostName() ) );
|
| (5.4) |
戻ってきた応答を読みます。
| (5.5) |
接続をシャットダウンします。
| (5.6) |
次のプログラム finger は、finger プロトコル を用いてクエリーを作成します。
>
|
Sockets:-GetHostName();
|
| (5.7) |
>
|
finger := proc( _who )
local who, at, host, sock;
who := _who;
at := StringTools:-FirstFromLeft( "@", who );
if at <> FAIL then
host := who[ 1 + at .. -1 ];
who := who[ 1 .. at - 1 ]
else
host := "localhost"
end if;
use Sockets in
sock := Open( host, finger );
Write( sock, sprintf( "%s\r\n", who ) );
printf( "%s\n", Read( sock, 5 ) );
Close( sock )
end use;
NULL
end proc:
finger( "maple@deneb" );
|
Login Name TTY Idle When Where
maple Maple Development pts/7 <Apr 22 16:31> deneb.maplesoft.
mapledis Maple Distribution < . . . . >
| |
|
|
Download Help Document
Was this information helpful?