| WideStudio Programming Guide | WideStudio 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/ＩＰ地址，和服务器的通口端口。服务器端的属性设定，是通过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.70 for WideStudio ver 3.70, May 2004

WideStudio documents index | Table of contents

Copyright(C) WideStudio Development Team, 1999-2004 | Last modified: May 25, 2004