Ниже приведены исходные тексты простого сервера приложений и клиента. Сервер ожидает подключения от клиентов, получает от них сообщения и посылает их обратно. Клиент подключается к серверу, получает данные с клавиатуры, посылает их серверу и выводит на экран то, что возвращает сервер.
Сервер:
// 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 |