WideStudio Programming Guide

| WideStudio Programming Guide | WideStudio Index 目次

> ## TCP/IP を使ったネットワーク通信

> ### TCPソケットを使ったネットワーク通信をするには

> TCP ネットワーク通信は、クライアント、サーバ接続指向の通信を行います。 サーバ側ソケット WSCvssocket クラスは、クライアント側ソケット WSCvcsocket からの接続を受け付けます。
> 通常、TCP ソケットを C/C++ 言語上で取り扱う場合、accept や、listen、 connect 等を利用して接続をおこないますが、WideStudioでは、TCP ソケット の接続に関する処理は部品内部で自動的に行い、部品の利用者には隠蔽されて いて、それらに関する処理は記述する必要がありません。
> TCP ソケット部品は、IP アドレスや、PORT のプロパティを持ち、設定するだ けで機能するように出来ており、ソケット部品の利用者は単に、TCP ソケット 部品に対し、データの送受信を行います。TCP ソケット部品には、接続を行う 側(クライアント側) 接続を受け付ける側(サーバ側)とがあります。

> クライアント側とサーバ側では、主に接続を行う際の動作が異なります。クラ イアント側はネットワーク上のある特定のアドレスとポートに存在するサーバー に接続しに行くのに対して、サーバ側は、クライアントから接続されるのを待 ちます。
> 従って、TCP 通信を行う場合、WSCvcsocket (クライアント側)は必ず、接続待 機しているWSCvssocket (サーバ側)に接続しなければなりません。
> クライアント側におけるプロパティの設定は、WSNip に接続先サーバのTCP/IP アドレスを指定し、WSNport に相手先サーバのソケットのポートを指定します。 サーバ側におけるプロパティの設定は、WSNport に受け付け用のソケットのポー トを指定し、WSNrunning をオンに設定します。WSNip には通常、特に設定を 行いませんが、もし同じマシンに複数のアドレスが存在し、そのアドレスのう ち受け付けるアドレスを特定する場合のみ、WSNip を指定します。
> クライアント側で WSCvcsocket::exec メソッドを実行することにより、サー バー側の WSCvssocket へ接続が行われます。接続が行われると、クライアン ト側、サーバー側双方で ACITVATE イベントが発生し、その起動されるイベン トプロシージャにおいて通信を行います。

> 接続に成功した際、ACTIVATE で起動されるイベントプロシージャの クライアント側データ送受信のサンプルです。

>     #include <WScom.h>
>     #include <WSCfunctionList.h>
>     #include <WSCbase.h>
>     //----------------------------------------------------------
>     //Function for the event procedure
>     //----------------------------------------------------------
>     #include <WSCvcsocket.h>

>     void com_ep(WSCbase* object){
>       //do something...
>       WSCvcsocket* sock = (WSCvcsocket*)object->cast("WSCvcsocket");
>       char buffer[128];
>       sprintf(buffer,"test!!! %d",cnt);
>       cnt++;

>       //send data;
>       long send_len = sock->write((WSCuchar*)buffer,128);
>       if (send_len == 128){
>         //success! do something..
>       }else{
>         //error!
>         return;
>       }

>       //receive data;
>       buffer[0] = 0;
>       long recv_len = sock->read((WSCuchar*)buffer,128);
>       if (recv_len == 128){
>         //success! do something..
>       }else{
>         //error!
>         return;
>       }
>     }
>     static WSCfunctionRegister  op("com_ep",(void*)com_ep);

> 次は接続確立時にACTIVATE で起動されるサーバー側のデータ送受信プロシージャのサンプルです。

>     #include <WScom.h>
>     #include <WSCfunctionList.h>
>     #include <WSCbase.h>
>     //----------------------------------------------------------
>     //Function for the event procedure
>     //----------------------------------------------------------
>     #include <WSCvssocket.h>

>     void com_ep(WSCbase* object){
>       //do something...
>       WSCvssocket* obj = (WSCvssocket*)object->cast("WSCvssocket");
>       char buffer[128];

>       //receive data:
>       //クライアントからのデータが buffer に格納
>       obj->read((WSCuchar*)buffer,128);

>       //send data:
>       //クライアントへののデータを buffer に格納して送信。
>       strcpy(buffer,"send data...");
>       obj->write((WSCuchar*)buffer,128);
>     }
>     static WSCfunctionRegister  op("com_ep",(void*)com_ep);

> 次は接続確立してデータの送受信をさせる、クライアント側のイベントプロシージャのサンプルです。

>     #include <WScom.h>
>     #include <WSCfunctionList.h>
>     #include <WSCbase.h>
>     //----------------------------------------------------------
>     //Function for the event procedure
>     //----------------------------------------------------------
>     #include <WSCvcsocket.h>
>     extern WSCvcsocket* newvcso_000;

>     void btnop(WSCbase* object){
>       //接続開始、接続後、データ送受信を行わせます。
>       long ret = newvcso_000->exec();
>       if (ret != WS_NO_ERR){ //接続失敗
>         return;
>       }
>     }
>     static WSCfunctionRegister  op("btnop",(void*)btnop);

> ### UDPソケットを使った同報ネットワーク通信をするには

> UDP の場合、特定の相手と接続することなく、不特定多数(ブロードキャスト アドレス:通常は、xxx.xxx.xxx.255)に対してデータ送信することができます。 送信時に指定されたポートでデータを待ち受けているものがデータを受け取り ます。

> 送信側におけるプロパティの設定は、WSNport に相手先のソケットのポートを 指定します。また、WSNip にブロードキャストアドレス、通常は、 255.255.255.255、を指定しますが、255.255.255.255 では送信できないシス テムでは、送信先ネットワークアドレスの末桁を 255 にしたものを指定しま す。たとえば、10.20.30.XX に存在する不特定のマシンに送信する場合、 10.20.30.255 を指定します。
> 受信側におけるプロパティの設定は、WSNport に受け付け用のソケットのポー トを指定し、WSNrunning をオンに設定します。WSNip には通常、特に設定を 行いませんが、もし同じマシンに複数のアドレスが存在し、そのアドレスのう ち受け付けるアドレスを特定する場合のみ、WSNip を指定します。 送信側は、接続を行わない分、TCP の場合に比べて単純です。単に、 WSCvudpsocket::write を呼び出し、データを送信します。

>     #include <WScom.h>
>     #include <WSCfunctionList.h>
>     #include <WSCbase.h>
>     //----------------------------------------------------------
>     //Function for the event procedure
>     //----------------------------------------------------------
>     #include <WSCvudpsocket.h>
>     extern WSCvudpsocket* newvudp_000;

>     void btnop(WSCbase* object){
>       static long cnt = 0;
>       WSCuchar buffer[64];
>       //buffer にデータを格納し、送信
>       strcpy(buffer,"send data..");
>       long ret = newvudp_000->write(buffer,64);
>       if (ret < 64){
>         //送信失敗
>       }else{
>         //送信成功
>       }
>     }
>     static WSCfunctionRegister  op("btnop",(void*)btnop);

> 受信側は、TCP のサーバー側と同じように、ACTIVATE イベントで起動するイ ベントプロシージャにおいて受信します。

>     #include <WScom.h>
>     #include <WSCfunctionList.h>
>     #include <WSCbase.h>
>     //----------------------------------------------------------
>     //Function for the event procedure
>     //----------------------------------------------------------
>     #include <WSCvudpsocket.h>
>     extern WSCvudpsocket* newvudp_000;

>     void recvop(WSCbase* object){
>       WSCuchar buffer[64];
>       //データの受信
>       newvudp_000->read(buffer,64);
>     }
>     static WSCfunctionRegister  op("recvop",(void*)recvop);

Document Release 3.70 for WideStudio ver 3.70, Feb 2004

WideStudio documents index | 目次

Copyright(C) T. Hirabayashi, 2000-2004 | Last modified: Feb 25, 2004