Ниже приведены исходные тексты простого сервера приложений и клиента. Сервер ожидает подключения от клиентов, получает от них сообщения и посылает их обратно. Клиент подключается к серверу, получает данные с клавиатуры, посылает их серверу и выводит на экран то, что возвращает сервер.
Сервер:
// Stand for connection and simply make echo. #define DEFPORT 3000 function main( cport ) local nPort, nH, nT := seconds() + 60 local nCon clear screen nport := iif( cport != nil, val(cport), DEFPORT ) if (nH := tcpListen( nport, 10 )) == -1 ? "tcpsrv: Error listen on port ", nport ? return( 1 ) endif ? "wait client connection" do while( .t. ) if (nCon := tcpAccept( nH, 50 )) != -1 ? "start",nH,nCon start( @conEcho(), nCon ) endif sleep(1) enddo tcpClose( nH ) ? return( 0 ) static function ConEcho( nH ) // Make echo. local cBuf := space(5), nL, cTxt ? "task, param : ", nH do while( .t. ) if( (nL := tcpRead( nH, @cBuf, len(cBuf), 6000 )) > 0 ) if( nL == 1 .and. upper( substr(cbuf,1,1)) == "Q" ) exit endif ? "tcpsrv, read : ", nL cTxt := "tcpsrv:" + substr(cBuf, 1, nL) tcpWrite( nH, cTxt ) endif enddo tcpClose( nH ) return( 0 )
Клиент:
#define BUFLEN 1024 #define DEFPORT 3000 #define DEFHOST "localhost" #define nTimeOut 600 function main( cport, chost ) local nH, nPort , nL, cbuf := space( BUFLEN ) local nK, cEnv clear screen nPort := iif(valtype(cport)=='C', val( cport), DEFPORT ) if( chost == nil ); chost := DEFHOST; endif ? "Connecting to " + getHostByName( cHost ) if( (nH := tcpConnect( cHost, nPort, nTimeOut )) == -1 ) ? "Error connecting to " + cHost + " on port " ?? nPort ? return( 1 ) endif nK := 0; cEnv := "" do while ( nK != 27 ) if( (nL := tcpRead( nH, @cbuf, BUFLEN, 60 )) > 0 ) ? "Received ("+alltrim(str(nL))+"):"+substr(cbuf,1,nL) ? endif if( (nK := inkey( 0.1 )) == 0 ) loop; endif if( nK == 13 ) nL := tcpWrite( nH, cEnv ) ? "Send: ",nl, + cEnv if upper(cEnv)=="Q" exit endif cEnv := "" else cEnv += chr(nK) endif enddo ? tcpClose( nH ) ? return( 0 )
Пред. | Начало | След. |
Функции TCP | Уровень выше | Utilites |