SocketOpen

SocketOpen[port]

ローカルホスト port へのTCP接続が可能なソケットを開き,ソケットを表すSocketObjectを返す.

SocketOpen[address]

指定されたローカルアドレスへのTCP接続が可能なソケットを開く.

SocketOpen[address,"protocol"]

指定されたプロトコルでの接続が可能なソケットを開く.

SocketOpen[address,{"protocol","type"}]

指定された protocol および type の接続を許容するソケットを開く.

詳細

  • サポートされるプロトコル
  • "TCP"生のTCPストリームプロトコル
    "ZMQ"ZeroMQの1対1のメッセージプロトコル
    {"ZMQ","type"}指定のタイプのZeroMQプロトコル
  • 次は,ZMQソケットについて可能なタイプである.
  • "Pair"厳密に1つのクライアントピアと送受信できるソケット
    "Publish"接続されているすべてのクライアントにメッセージを送信するソケット
    "Subscribe"公開者ソケットからメッセージを受信するソケット
    "Request"対応する応答ソケットに要求メッセージを送信し,応答メッセージを受信するソケットs
    "Reply"対応する"Request"ソケットから要求メッセージを受信し,応答メッセージを送り返すソケット
    "Dealer"送信されたメッセージが接続されたすべてのクライアントにラウンドロビン形式で配信されることを除いて,"Request" ソケットと同じ
    "Router"メッセージが接続されたすべてのクライアントから公平キュー形式で受信されルーティング情報を維持することを除いて,"Reply" ソケットと同じ
    "Pull"メッセージを受信するパイプライン位相のソケット
    "Push"メッセージを送信するパイプライン位相のソケット
    "XPublish"このソケットで受信したメッセージがサブスクリプションであることを除いて"Publish"と同じ
    "XSubscribe"このソケットで送信したメッセージが対応する"XPublish"ソケットのサブスクリプションとして使われること除いて"Subscribe"と同じ
    "Stream"ZMQソケットを非ZMQ TCPソケットに接続するためのソケット
  • ZMQプロトコルタイプの指定がない場合,もとになるソケットは{"ZMQ","Pair"}ソケットである.
  • SocketOpenはローカルマシンでのみソケットを開く.
  • SocketOpenはローカルアドレスしか使えない.次は可能な形式である.
  • {host,port}ローカルのホスト名またはIPアドレスとポート番号
    {host,"service"}ローカルのホスト名またはIPアドレスとサービス名
    "host:port"ポートのあるローカルのホスト名またはIPアドレス
    {host,Automatic}指定されたホスト上の使用可能なポート
    Automaticローカルホスト上の使用可能なポート
  • ホスト名は"www.wolfram.com"のような形式である.
  • IPアドレスは,"140.177.0.0"あるいはIPAddress[string]として与えることができる.string はIPv4またはIPv6のIPアドレスである.
  • SocketConnectを使ってSocketOpenで開かれたソケットに接続することができる.ソケットが1つのマシンで開いているという事実は,他のマシンでこれに接続できることを保証はしない.
  • 確立すべき接続については,プロトコルが一貫していなければならず,接続を阻むファイヤーウォール等があってはならない.
  • 異なるZMQソケットタイプの扱い方についての情報は,ZeroMQ documentationを参照のこと.
  • Closeを使ってSocketOpenで開いた接続を閉じることができる.

例題

すべて開くすべて閉じる

  (2)

ソケットを開き,クライアントの接続を許可する:

クライアントを接続する:

ソケットを閉じる:

ZMQソケットを開く:

クライアントをサーバに接続する:

クライアントからのメッセージをサーバに書き込む:

サーバ上でメッセージを読む:

ソケットを閉じる:

スコープ  (3)

クライアントが開かれたTCPソケットに接続した後では,各クライアントは特性"ConnectedClients"を持つSocketObjectとして接続することができる.

サーバソケットを開き,接続を許可し,クライアントをソケットに接続する:

サーバの視点からクライアントソケットをリストする:

これらのソケットは,Socketsでリモートソケットとしても表示される:

ソケットを閉じる:

指定されたIPアドレスでサーバソケットを開く:

指定されたポートでサーバソケットを開く:

ソケットを閉じる:

一方向のメッセージパイプラインとして使えるタイプ"Push"のZMQソケットを開く:

"Pull"ソケットタイプで接続する:

"Push"ソケットにメッセージを書く:

"Pull"ソケットのメッセージを読む:

ソケットを閉じる:

アプリケーション  (1)

SocketOpenを使い,WebサーバをWolfram言語で実装する.

TCPポート上で受信し始める:

最初は接続されたクライアントがない:

Webブラウザからサーバに接続する:

これで,Webブラウザからのクライアントが少なくとも1つできた:

全クライアントに一般的な応答を書く:

最後に,サーバとクライアントとの接続を閉じる:

考えられる問題  (1)

SocketOpenから返されたソケットに書き込むことはZMQソケットでしかできない.TCPソケットの場合は"ConnectedClients"特性を使わなければならない.

TCPソケットとZMQソケットを開き,クライアントを接続する:

特定のクライアントに書き込まなければならないので,TCPソケットに書き込もうとしても失敗する:

しかし,ZMQソケットへの直接の書込みは問題なく行える:

すべてのソケットを閉じる:

Wolfram Research (2017), SocketOpen, Wolfram言語関数, https://reference.wolfram.com/language/ref/SocketOpen.html (2020年に更新).

テキスト

Wolfram Research (2017), SocketOpen, Wolfram言語関数, https://reference.wolfram.com/language/ref/SocketOpen.html (2020年に更新).

CMS

Wolfram Language. 2017. "SocketOpen." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2020. https://reference.wolfram.com/language/ref/SocketOpen.html.

APA

Wolfram Language. (2017). SocketOpen. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/SocketOpen.html

BibTeX

@misc{reference.wolfram_2024_socketopen, author="Wolfram Research", title="{SocketOpen}", year="2020", howpublished="\url{https://reference.wolfram.com/language/ref/SocketOpen.html}", note=[Accessed: 22-November-2024 ]}

BibLaTeX

@online{reference.wolfram_2024_socketopen, organization={Wolfram Research}, title={SocketOpen}, year={2020}, url={https://reference.wolfram.com/language/ref/SocketOpen.html}, note=[Accessed: 22-November-2024 ]}