ソケットとは通信を行うアプリケーションの仮想的なインターフェースのことです。サーバは指定したポート番号でクライアントからの接続を待ち、クライアントはIPアドレスもしくはホスト名とポート番号を指定してサーバに接続します。接続が成功するとサーバ、クライアントともにソケットが生成され、そのソケットに対してデータ送受信を行うことができます。Curlでは、ソケットサーバ及びクライアントを実装することができます。
TCPサーバ
以下は、TCPサーバのコードサンプルです。
{let socket-server:AcceptorTCPSocket = {AcceptorTCPSocket}} {server-socket.bind local-port = port, acceptable-handler = {on e:AcceptableSocketEvent do def socket = {server-socket.accept} {try || receive {with-open-streams input-stream = {socket.to-InputStream} do {print {input-stream.read allow-short-read? = true}} || send |
AcceptorTCPSocketクラスをnewすることによりサーバソケットを生成し、bindメソッドを実行することで、ローカルアドレスの指定したポートにバインドします。ここでbindメソッドの引数としてクライアントから受信した際に発生させるイベントAcceptableSocketEventをacceptable-handler引数にセットします。ここでは、受信した場合にクライアントから送信されたストリームデータを文字列として表示し、結果をOutputStreamとして返しています。
TCPクライアント
以下は、TCPクライアントのコードサンプルです。
let socket:DataTCPSocket = || receive |
DataTCPSocketクラスを用いてクライアントソケットを生成し、connectメソッドにてサーバに接続します。サーバにデータを送信するには、ソケットのto-OutputStreamメソッドでOutputStreamを生成し、データを書き込みます(writeメソッド)。また、サンプルでは、サーバからのレスポンスをソケットのto-InputStreamメソッドによりInputStreamを受け取り、コンソールに出力しています。ソケットを閉じるにはcloseメソッドを利用します。
また、CurlではUDPサーバ及びクライアントも取り扱うことができますし、非同期通信も可能となっています。詳細はCurlのヘルプをご確認ください。
コードサンプルのダウンロード