SocketReadMessage[socket]
指定されたソケット上の次に読込み可能なメッセージを読み,バイト配列として返す.
SocketReadMessage
SocketReadMessage[socket]
指定されたソケット上の次に読込み可能なメッセージを読み,バイト配列として返す.
詳細とオプション
- SocketReadMessageは以下のオプションをサポートする.
-
"MultipartComplete" True メッセージ全体を読むか、一部だけを読むか - オプション"MultipartComplete"はWebソケットにしか影響を与えない.
- ソケットはSocketObject[…]として指定される.
- ZMQソケットについては,SocketReadMessageはソケットに送られた次の離散的なメッセージを返す.ずべてのマルチパート要素を繋ぎ合せて1つのByteArrayにして返す.
- TCPソケットについては,SocketReadMessageは現行のオペレーティングシステムのバッファにあるデータのByteArrayを返す.
- SocketReadMessageは,Webソケットについては以下のキーを持つAssociationを返す.
-
"DataByteArray" メッセージのペイロード(ByteArray) "Type" メッセージタイプ,"Text"または"Binary" "MultipartComplete" メッセージに追加部分があるかどうか - キー"MultipartComplete"の値がTrueの場合,追加部分は存在しない.オプション"MultipartComplete" もTrueの場合,このキーの値は常にTrueになる.
例題
すべて開く すべて閉じる例 (3)
server = SocketOpen[Automatic, "ZMQ"];
client = SocketConnect[{server["DestinationIPAddress"], server["DestinationPort"]}, "ZMQ"];片方でメッセージを書くと,このメッセージがByteArrayとしてもう片方に送られる:
WriteString[client, "hello from the client"]SocketReadMessage[server]ByteArrayToStringでこれを文字列に変換する:
ByteArrayToString[%]Close /@ {server, client}TCPソケットについては,SocketReadMessageが返すメッセージのサイズは確定的ではなく,オペレーティングシステムによって制御される:
server = SocketOpen[Automatic, "TCP"];
client = SocketConnect[server];WriteString[First@server["ConnectedClients"], StringJoin@Table["a", 2000]]読み出せるデータが無くなるまでソケットからメッセージを読む:
First@Last@Reap[While[SocketReadyQ[client], Sow[SocketReadMessage[client]]]]個別のバッファを加算するとソケットで送られたメッセージ全体になることを確認する:
Total[Length /@ %]Close /@ {server, client}socket = SocketConnect["wss://echo.websocket.org"];
msg = SocketReadMessage[socket]ByteArrayToString[msg["DataByteArray"]]スコープ (1)
ZMQソケットでは,WriteStringに送られたすべての式について単一のメッセージが送信される:
server = SocketOpen[Automatic, "ZMQ"];
client = SocketConnect[server]WriteString[server, Alphabet[]]ByteArrayToString@SocketReadMessage[client]式はWriteで書いてReadで読み出すことができる.送られた各個別メッセージは完全な式として読み出すことができる:
Do[Write[client, Graphics[{RandomColor[], Disk[]}]], 10]Table[Read[server], 10]式は,ソケット上に,デフォルトで,InputFormの文字列として書かれる:
Write[server, RandomImage[1, 5]]ByteArrayToString@SocketReadMessage[client]ToExpression[%]Writeで式を書くと,追加的に新規行のメッセージが表示される:
Do[Write[server, f[x]], 3];
First@Last@Reap[While[SocketReadyQ[client], Sow[ByteArrayToString[SocketReadMessage[client]]]]]アプリケーション (1)
ソケットに送られた全データを削除するフラッシュ関数を定義する:
server = SocketOpen[Automatic, "ZMQ"];
client = SocketConnect[server];flush[sock_] := While[SocketReadyQ[sock], SocketReadMessage[sock]]i = 1;
Do[WriteString[server, i++], 1000]SocketReadyQ[client]ByteArrayToString@SocketReadMessage[client]flush[client]読み出せるデータがなくなった.新たなデータを送信されると,それが最初に出る:
SocketReadyQ[client]WriteString[server, i++]ByteArrayToString@SocketReadMessage[client]Close /@ {server, client}おもしろい例題 (1)
sock = SocketOpen[Automatic]Webブラウザを接続し,ブラウザからソケットに書き込まれたHTTPリクエストを見る:
SystemOpen@URLBuild[<|"Scheme" -> "http", "Port" -> sock["DestinationPort"], "Domain" -> First@sock["DestinationIPAddress"]|>]まだHTTP応答を送っていないので,ブラウザウィンドウには何も表示されていない.
接続されたクラアントを見る(ブラウザによっては複数あるかもしれない):
sock["ConnectedClients"]ByteArrayToString /@ SocketReadMessage /@ Select[sock["ConnectedClients"], SocketReadyQ]Close /@ sock["ConnectedClients"]関連するガイド
テキスト
Wolfram Research (2017), SocketReadMessage, Wolfram言語関数, https://reference.wolfram.com/language/ref/SocketReadMessage.html.
CMS
Wolfram Language. 2017. "SocketReadMessage." Wolfram Language & System Documentation Center. Wolfram Research. https://reference.wolfram.com/language/ref/SocketReadMessage.html.
APA
Wolfram Language. (2017). SocketReadMessage. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/SocketReadMessage.html
BibTeX
@misc{reference.wolfram_2026_socketreadmessage, author="Wolfram Research", title="{SocketReadMessage}", year="2017", howpublished="\url{https://reference.wolfram.com/language/ref/SocketReadMessage.html}", note=[Accessed: 02-November-2026]}
BibLaTeX
@online{reference.wolfram_2026_socketreadmessage, organization={Wolfram Research}, title={SocketReadMessage}, year={2017}, url={https://reference.wolfram.com/language/ref/SocketReadMessage.html}, note=[Accessed: 02-November-2026]}