| Programming Guide | WideStudio/MWT 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);
| Copyright(C) WideStudio/MWT Development Team, 1999-2005 | Last modified: Jul 31, 2005 |