Sockets[Read] - ソケット接続からのテキストデータの読み込み
使い方
Read(sid, timeout)
パラメータ
sid - 有効な開かれたソケット ID
timeout - (オプション) 非負の整数; タイムアウトの指定(単位秒)
|
説明
|
|
•
|
手続き Read は、ソケット接続から、Maple の文字列形式である本文データを読み込むために使用します。
|
•
|
引数 sid は、開かれたソケット接続に関する有効なソケット ID でなくてはなりません。オプションの引数 timeout は、読み込みの操作が時間切れとなるまで待つ時間の秒数を表すものとして、受け渡されます。
|
•
|
利用可能なデータ(システムに依存した最大バイト数まで)が読み込まれる時、Read は呼び出されると、ソケット sid 上でデータが利用可能となるまで、ずっとブロックします。ソケットから読み込まれるデータは、Maple の文字列として返されます。 timeout パラメータと共にこの手続きが呼び出され、そして指定された秒数内にソケット sid 上でデータが利用可能とならなければ、 Read の操作は false を返します。
|
•
|
Read( sid, 0 ) の形の呼び出しは、直ちに値 false を返します。
|
•
|
Maple の文字列には null (空白の)バイトを含むことができないため、ネットワークを越えてくるデータがプレーンの ASCII テキストからなる場合(通常の場合)にのみ、 Read を使用します。データが null バイトを含む場合には、代わりに Sockets[ReadBinary] を使用して下さい。
|
|
|
例
|
|
この例では、null バイトを含む場合に、データがどのように失われる可能性があるかを示しています。
>
|
with( Sockets ):
sid := Open( "vulcan", "echo" );
|
| (2.1) |
>
|
data := [ op( convert( "Hi", 'bytes' ) ), 0, op( convert( "there", 'bytes' ) ) ];
|
| (2.2) |
>
|
datalen := nops( data ):
data := Array( data, 'datatype' = 'integer'[ 1 ] );
|
| (2.3) |
>
|
WriteBinary( sid, data );
|
| (2.4) |
| (2.5) |
>
|
WriteBinary( sid, data );
|
| (2.6) |
>
|
a := Array( 1 .. datalen, 'datatype' = 'integer'[ 1 ] );
|
| (2.7) |
| (2.8) |
| (2.9) |
| (2.10) |
問題の原因は、Maple の文字列が null バイトを含むことができないことです。
>
|
convert( data, 'list' ); # back again
|
| (2.11) |
| (2.12) |
|
|
Download Help Document
Was this information helpful?