# 概要

TCP を用いる。サーバがリスニングする代表的なポートは 9801 だが、これはもちろん状況によって変わる。

接続確立
クライアントがリクエスト送信
サーバがレスポンス送信
切断

http を模倣しているが、クライアントがサーバのデータを欲しているわけではないという点で http とは異なる。


# リクエスト

SEND SSTP/2.0
User-Agent: %s
Sender: %s
Script: %s
Echo: %s

http を模倣している。User-Agent には送信しているプログラムの名前、Sender には送信者の名前が入る。Script はサーバに発言させるスクリプトであり、Echo はサーバのコンソールに出力する文字列である。各行は CR+LF で区切られ、空行が最終行を示す。

sprintf(sendbuf,"SEND SSTP/2.0\r\nUser-Agent: %s\r\nSender: %s\r\nScript: %s\r\nEcho: %s\r\n",useragent,sender,script,echo);


# レスポンス

SSTP/2.0 200 OK
SSTP/2.0 400 Bad Request

200 OK は正常な終了、400 Bad Request はリクエストの書式に誤りがあることを示す。各行は CR+LF で区切られ、空行が最終行を示す。


# 余禄

極めて単純なプロトコルであり、Script ヘッダにセットされるスクリプトの書式を規定しなければ、単なる文字列送信プロトコルである。従って Simple String Transfer Protocol と言える。しかし、サーバは特定のスクリプトしか解釈しないのが普通であり、仮に Stand のスクリプトしか送らないとすれば、それは Stand Script Transfer Protocol と言える。まあそんなことを言ってると xml を使えと言われそうだが…

SSTP サーバは、その性質上複数のクライアントを同時には受け入れないと考えられる。SSTP は HTTP のようにクライアントにファイルを送るのではなく、サーバの出力デバイスに出力を行うことを目的としているわけで、HTTP のようにクライアント数ぶんスレッドを作って全部裏で処理、というわけには行かない。

戻る