WideStudio/MWT Logo
WideStudio/MWT
Programming Guide
WideStudio/MWT Index
Table of contents


使用TCP/IP的网络通讯



制作使用TCP通口的网络通讯

通过TCP 网络通讯,可以进行顾客端和服务器端的通讯。 服务器端的 WSCvssocket Class,可受理来自顾客端 WSCvcsocket 的连接。

通常,在 C/C++语言上处理TCP 通口时,利用accept ,listen,connect 等进行连接。不过,在WideStudio,有关TCP 通口的连接处理均可内部自动进行,对利用者不公开,所以不需进行有关处理记述。

TCP 通口部件,只须使用IP 地址,PORT 的属性,就可实现。通口部件的利用者,仅仅需要对TCP 通口部件进行数据的发送接收。在TCP 通口部件里,有进行连接的一侧(顾客端),和进行接收连接的一侧(服务器方面)。



顾客端方面和服务器方面,进行连接时的动作不同。顾客端连接有特定地址和端口的网络,服务器端等待被顾客端连接。

因此,如果进行TCP 通讯,WSCvcsocket (顾客端)必须连接待命的WSCvssocket (服务器)。

顾客端的属性设定,是通过WSNip 指定所连接服务器的TCP/IP地址,和服务器的通口端口。服务器端的属性设定,是通过WSNport 指定将接受的通口端口,设定WSNrunning为ON 。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:
  //Store data from a client into buffer
  obj->read((WSCuchar*)buffer,128);

  //send data:
  //Store data for a client into buffer to send it
  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){
  //Initiate connection and exchange data after connection
  long ret = newvcso_000->exec();
  if (ret != WS_NO_ERR){ //connection failed
    return;
  }
}
static WSCfunctionRegister  op("btnop",(void*)btnop);



使用UDP通口进行通知网络通讯

使用UDP时,不是与特定的服务器连接,而是对多数服务器(broadcast address:通常,xxx.xxx.xxx. 255)进行数据发送。发送时,使用被指定的端口进行数据接受的服务器将可接收数据。

发送方面的属性设定时,指定对方的通口端口到WSNport中。同时,在WSNip中指定 broadcast address,通常指定为255.255.255.255。不过,对于255.255.255.255不能发送的系统,指定将发送网络地址最后地址改为255的地址。譬如,如果向10.20.30.XX 存在的非特定机器发送,指定为10.20.30.255。

接收方面的属性设定时,在WSNport中指定接受用的通口端口,设定WSNrunning为On 。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];
  //send data in buffer 
  strcpy(buffer,"send data..");
  long ret = newvudp_000->write(buffer,64);
  if (ret < 64){
    //failed.
  }else{
    //success
  }
}
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];
  //Receiving data
  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 | Table of contents

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