WideStudio/MWT Logo
WideStudio/MWT
Programming Guide
WideStudio/MWT 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.90 for WideStudio/MWT ver 3.90, Jul 2005


WideStudio/MWT documents index | 目次

Copyright(C) WideStudio/MWT Development Team, 1999-2005 Last modified: Jul 31, 2005