| WideStudio Programming Guide | WideStudio Index Table of contents

> ## 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 을 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];
>       //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, May 2004

WideStudio documents index | Table of contents

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