| TCPACCEPT() | Accept a connection on a socket. |
| TCPCLOSE() | Закрыть соединение. |
| TCPCONNECT() | Установить соединение с сервером. |
| TCPLISTEN() | Слушать порт. |
| TCPREAD() | Прочитать в буфер данные из соединения. |
| TCPWRITE() | Передать данные из буфера в соединения. |
TCPACCEPT(<nSock>[, <nTimeout>]) --> <nNewSocket>
Возвращает числовое значение <nNewSocket> дескриптор нового сокета или -1, если произошла ошибка.
TCPACCEPT() выбирает первый запрос на соединение из очереди ожидающих, создает новый сокет со свойствами исходного <nSock>, и возвращает новый дескриптор файла <nNewSocket>.
FERROR() и FERRORSTR() хранят номер и описание ошибки.
#define DEFPORT 3000
local nH, nPort, nCon
nPort := DEFPORT
if (nH := TCPLISTEN( nPort, 10 )) == -1
? "tcpsrv: Error listen on port ", nPort
?
return( 1 )
endif
//? "wait client connection"
do while( .t. )
? "wait client connection",time()
if (nCon := TCPACCEPT( nH, 5000 )) != -1
? "start",nH,nCon
start( {|nC| /* reading data from connection */ TCPREAD(nC....)}, nCon )
endif
sleep(0.01)
enddo
TCPCLOSE( nH )
TCPCLOSE(<nConnection>) --> TRUE || FALSE
Возвращает TRUE, если соединение успешно закрыто.
TCPCLOSE() закрывает открытое соединене и возвращает TRUE в случае успешного завершения операции.
nH := TCPLISTEN(3000) If nH > 0 .... TCPCLOSE(nH) endif
TCPCONNECT(<sHostName>[, <nPort>][, <nTimeout>]) --> <nConnection>
Возвращает номер соединения или -1.
TCPCONNECT() устанавливает соединение с сервером <sHostName> и создает сокет к порту <nPort>.Возвращат номер соединения <nConnection> или -1 в случае ошибки. FERROR() и FERRORSTR() хранят номер и описание ошибки.
con := TCPCONNECT("http://www.itk.ru")
if con > -1
? "connection: ", con
....
TCPCLOSE(con)
else
? FERROR()
endif
TCPLISTEN(<nPort>[, <nBackLog>]) --> <nErrNo>
Возвращает числовое значение <nErrNo>: ноль - операция завершилась успешно, <nErrNo> - код ошибки.
TCPLISTEN() создает сокет и устанавливает прослушивание входящих соединений.
#define DEFPORT 3000
local nH, nPort, nCon
nPort := DEFPORT
if (nH := TCPLISTEN( nPort, 10 )) == -1
? "tcpsrv: Error listen on port ", nPort
?
return( 1 )
endif
//? "wait client connection"
do while( .t. )
? "wait client connection",time()
if (nCon := TCPACCEPT( nH, 5000 )) != -1
? "start",nH,nCon
start( {|nC| /* reading data from connection */ TCPREAD(nC....)}, nCon )
endif
sleep(0.01)
enddo
TCPCLOSE( nH )
TCPREAD(<nConnection>, @<sBuffer>, <nLen>[, <nTimeout>]) --> <nLenBuf>
Returns numeric value - is the realy number of bytes received, or -1 if an error occurred.
TCPREAD() читает из соединения <nConnection> данные (не больше <nLen> байт) и записывает их в буфер <sBuffer>. FERROR() и FERRORSTR() хранят номер и описание ошибки.
con := TCPCONNECT("http://www.itk.ru")
if con > -1
? "connection: ", con
buf := ""
tr := TCPREAD(con, @buf, 1024)
if tr > -1
? buf
else
? "Error:", FERROR(), ":", FERRORSTR()
endif
TCPCLOSE(con)
else
? FERROR(), FERRORSTR()
endif
TCPWRITE(<nConnection>, <sBuffer>, <nLen>[, <nTimeout>]) --> <nLenBuf>
Returns numeric value - is the realy number of bytes commited, or -1 if an error occurred.
TCPWRITE() пытается передать некоторые данные <sBuffer> (длиной <nLen> байт) в соединение <nConnection> данные (не больше <nLen> байт). FERROR() и FERRORSTR() хранят номер и описание ошибки.
local cBuf := space(5), nL, cTxt, nH, nPort nPort := DEFPORT if (nH := TCPLISTEN( nPort, 10 )) == -1 ? "tcpsrv: Error listen on port ", nPort ? return( 1 ) endif do while( .t. ) if( (nL := TCPREAD( nH, @cBuf, len(cBuf), 60000 )) > 0 ) ? "tcpsrv, read : ", nL if( nL == 1 .and. upper( substr(cbuf,1,1)) == "Q" ) exit endif cTxt := "tcpsrv:" + substr(cBuf, 1, nL) TCPWRITE( nH, cTxt ) elseif ferror() == 32 ? "Error:",ferrorstr()+":","closed task:",nh exit endif //? "tcpsrv, read : ", nL,nh,time() enddo TCPCLOSE( nH )
| Пред. | Начало | След. |
| PACK/UNPACK | Уровень выше | INFO |