Chapter4. 拡張関数


4.7 通信関数

関数名
P@POPSTR
機能
受信した文字列を取得する
書式
str P@POPSTR( user/server )
《パラメーター》
user/server int。ユーザ番号またはサーバ番号を指定する
  
戻り値 str:受信した文字列
解説
P@RECVで受信したデータから、送信元がP@PUSHSTRで登録した順に文字列を取得する。
送信元がP@PUSHSTRで「AAA」「BBB」「CCC」の順に登録し送信した場合、本関数を実行する毎に「AAA」「BBB」「CCC」の順に文字列を取得する。送信した数以上に本関数を取得した場合は””(0文字)を取得する。
用例
ユーザがサーバに接続するとサーバからメッセージが送られる。そして直ぐに切断される。サーバアプリを実行後、クライアントを実行する。クライアントは複数実行できる。
//サーバ
S@BACKGROUND( 2 )                    //非アクティブでも動かす
CH = G@SETUP(300,200,16,1)           //画面初期化
SV = P@SRVMAKE( 5000 )               //サーバ通信開始
LOOP
  G@CHRCLEAR( CH )                   //画面クリア
  UU = P@SRVGETUSER( SV )            //クライアント接続チェック
  IF UU <> 0 THEN                    //接続した?
    MOJI$="接続してきました"
    P@PUSHSTR(UU,"やっほー")         //送信メッセージ登録
    P@SEND(UU)                       //送信
    P@CLOSE( UU )                    //クライアント切断
  ELSE
    MOJI$="接続待ち"
  ENDIF
  G@PRINT(CH,0, 0,MOJI$)
  G@FLIP()                           //画面更新
  S@SLEEP(500)
ENDLOOP
 
//クライアント
S@BACKGROUND( 2 )                    //非アクティブでも動かす
CH = G@SETUP(300,200,16,1)           //画面初期化
SV = P@USERMAKE("127.0.0.1" , 5000)  //サーバに接続開始
RMODE=0
LOOP
  G@CHRCLEAR( CH )                   //画面クリア
  IF SV <> 0 THEN                    //接続待ち or 接続中
    PRET = P@USERGETSTATE( SV )      //接続状態チェック
    SELECT
    WHEN PRET=0:                     //接続中?
      MOJI$="接続中…"
      BREAK
    WHEN PRET=1:                     //接続完了?
      MOJI$="接続しました"
      RMODE=1                        //受信可能とする
      BREAK
    WHEN PRET=-1:                    //接続失敗?
      MOJI$="接続失敗"
      SV = 0
      BREAK
    ENDSELECT
    IF RMODE = 1 THEN                //受信可能?
      IF 0 < P@RECV(SV) THEN         //受信 and 受信した?
        MOJI2$=P@POPSTR(SV)          //受信文字列取得
        P@CLOSE(SV)                  //サーバと切断
        SV=0
      ENDIF
    ENDIF
  ENDIF
  G@PRINT(CH,0, 0,MOJI$)
  G@PRINT(CH,0,20,MOJI2$)
  G@FLIP()                           //画面更新
ENDLOOP