2010-09-10

【PHP】簡単TCPクライアント

 
TCP通信のテストにクライアントが必要だったわけです。
ですが、こんなチョコッとしたものに、GUIのアプリを作るなんて面倒なので、昔ながらのCUIで作ってみたよ。
久方ぶりのコンソールアプリに興奮しました。
ちなみに、上がクライアント側、下がサーバ側。

'exit'と入力されるまで回る感じです。

<?php
  $url = 'tcp://IP or ドメイン名:ポート番号';
  $port = ポート番号;
  $timeout = 30;

  $fp = fsockopen( $url, $port, &$errno, &$errstr, $timeout );
  if( !$fp || $errno > 0 ) {
    print( "$errno ($errstr) \n" );
    exit();
  }

  while( true ) {
    print( 'input>' );
    // scanf関数は下のほう参照。
    $input = scanf();
    $send_text = sprintf( "%s %s\n", date( 'YmdHis' ), $input );

    print( 'SEND>>' . $send_text );
    fwrite( $fp, $send_text );
    print( 'RECV<<' . fgets( $fp, 4096 ) );

    if( $input == 'exit' ) {
      break;
    }
  }
  fclose( $fp );
  exit();
?>

---
PHPを使って、標準入力から入力するやり方を今まで知らなかったことに気づいた。

// 擬似scanf
function scanf()
{
    $stdin = fopen( "php://stdin", "r" );
    $line = trim( fgets( $stdin, 64 ) );
    fclose( $stdin );
    return $line;
}

という感じで、実際には「標準入力から1行読む」というようなことをしてる。

ZenBack

WebMoney ぷちカンパ