Maple Professional
Maple Academic
Maple Student Edition
Maple Personal Edition
Maple Player
Maple Player for iPad
MapleSim Professional
MapleSim Academic
Maple T.A. - Testing & Assessment
Maple T.A. MAA Placement Test Suite
Möbius - Online Courseware
Machine Design / Industrial Automation
Aerospace
Vehicle Engineering
Robotics
Power Industries
System Simulation and Analysis
Model development for HIL
Plant Modeling for Control Design
Robotics/Motion Control/Mechatronics
Other Application Areas
Mathematics Education
Engineering Education
High Schools & Two-Year Colleges
Testing & Assessment
Students
Financial Modeling
Operations Research
High Performance Computing
Physics
Live Webinars
Recorded Webinars
Upcoming Events
MaplePrimes
Maplesoft Blog
Maplesoft Membership
Maple Ambassador Program
MapleCloud
Technical Whitepapers
E-Mail Newsletters
Maple Books
Math Matters
Application Center
MapleSim Model Gallery
User Case Studies
Exploring Engineering Fundamentals
Teaching Concepts with Maple
Maplesoft Welcome Center
Teacher Resource Center
Student Help Center
Sockets パッケージの紹介
使い方
Sockets[function](arguments)
function(arguments)
use Sockets in ... end
説明
Sockets パッケージは、Maple 内でネットワークコミュニケーションを行うためのツールを集めたものです。このパッケージ内のルーチンは、(イントラネットまたはインターネットといった) ネットワーク上のリモートホストで実行されるプロセスに接続したり、このようなプロセスとの間でデータの交換を行うことを可能にします。特に、ネットワーク上にある異なるマシンで起動している、2 つの独立した Maple のプロセス同士でコミュニケーションをとることが可能です。
ネットワークのセキュリティに対する重要な注意事項について、このパッケージに関するリリースノート Sockets パッケージのリリースノート を参照して下さい。
このパッケージは、確かな、コネクション指向の、インターネットドメイン (TCP/IP) におけるストリームソケットを、ユーザインタフェースに与えます。手続き Sockets[Open] を用いることで、リモートマシン上にあるサーバへ接続および通信することを可能にする、クライアントソケットの作成が可能です。また、手続き Sockets[Serve] を用いることで、他者が接続およびリクエストの作成を行える、計算サービスを提供することも可能になります。
Sockets パッケージは、そのプロセスが不要なメモリとして回収の対象になった場合、あるいは Maple の処理が通常の方法で終了される場合に、開かれた接続を自動的にシャットダウンします。しかし、ユーザが制御できない事態に陥った場合には(終了の場合を除く)、ソケットの接続が通常のようにシャットダウンされるとは考えないほうがよいでしょう。
サポートされているプラットフォームおよびランタイムの問題点に関する詳細な情報については、 Sockets パッケージのリリースノート を参照して下さい。
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 の接続を終了します。
Close(arguments)
これらのルーチンをプログラミングで使用する場合には、作成するコードを use 文で囲んでこのパッケージを結びつけることで、パッケージの出力にアクセスすることが可能となります(例: use Sockets in ... end use)。詳細については、use を参照して下さい。
このパッケージにあるルーチンで作成されるソケットの接続は全て、Sockets パッケージで局所的に用いる、Sockets:-socketID という形で出力される不明瞭な型で表現されます。type( expr, Sockets:-socketID ) を用いることで、ソケット番号について、式 exprが正しい構造を持っているかどうかを調べることが可能です(この場合、型は引用されてはならないことに注意して下さい)。
Sockets パッケージ内にある関数に関するヘルプの参照方法
特定の Sockets 関数に関するヘルプを表示するためには、次のコマンドのうちのいずれかを入力します (ここで function は上記の一覧から選択した名前を表す)。
?Sockets[function]
?Sockets, function
?function (この場合、function は Maple で固有の名前でなくてはなりません。)
参考文献
Sockets パッケージにおけるネットワークプログラミングの概念に関する背景については、 Sockets references に示されている参考文献があります。
例
with を用いて、対話形式でアクセスできるパッケージの手続きを表示します。
with( Sockets );
ネットワーク上のどこにいるのかを検索します。
GetHostName();
peer (このヘルプページで作成されるマシンのように、同じネットワーク上にある特定のマシン) 上にあるエコーサーバへ接続します。
sid := Open( "vulcan", "echo" );
peer にメッセージを送ります。
Write( sid, sprintf( "Hello from %s!\n", GetHostName() ) );
戻ってきた応答を読みます。
Read( sid );
接続をシャットダウンします。
Close( sid );
次のプログラム finger は、finger プロトコル を用いてクエリーを作成します。
Sockets:-GetHostName();
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 < . . . . >
参照
help, iolib, module, process, socket の定義 - 用語集, Socket references, Socket パッケージのリリースノート, use, with
Download Help Document