Estoy usando una conexion por medio de sockets (Tsocket de fwh) y necesito saber si el metodo oSocket:SendData(cDat) tiene alguna limitacion en cuanto al largo de la cadena a enviar a un servidor.
Necesito enviar una cadena de unos 3000 bytes y cuando lo hago el servidor recibe una cadena cortada , como se puede hacer para que llegue en su totalidad sin tener que usar SendFile() ?
Muchas gracias por la ayuda que puedan brindarme
ENVIO DE DATOS CON TSOCKET
- Antonio Linares
- Site Admin
- Posts: 42520
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 31 times
- Been thanked: 75 times
- Contact:
Re: ENVIO DE DATOS CON TSOCKET
Que te devuelve la llamada a SendData() ? Debe devolver el tamaño de lo enviado.
Re: ENVIO DE DATOS CON TSOCKET
Hola antonio
El Cliente envia con Senddata() un archivo xml formateado como una cadena que tiene mas o menos 1600-1800 caracteres.
El servidor me la corta en unos 1400 bytes.
He probado agregar un syswait(.5) a continuacion del AddRequest() y aparentemente soluciona el problema, es como si el cliente estuviera enviando la data en paquetes ( como hace con sendfile() ), pero como se reciben cadenas de distintos clientes simultaneamente he tenido que implementar la TCtrlSocket para ir guardando la data en un array y poder procesarla secuencialmente. Sera que el Tctrl no tiene tiempo de procesar la data y esto lo que ocasiona el problema ?
No se si esto que he hecho sera confiable con una demanda de 15-20 clientes en forma simultanea que es lo que espero recibir en forma habitual.
Aqui tienes parte del codigo a ver si puedes ver algun error
Muchas gracias por la ayuda que puedas brindarme
El Cliente envia con Senddata() un archivo xml formateado como una cadena que tiene mas o menos 1600-1800 caracteres.
El servidor me la corta en unos 1400 bytes.
He probado agregar un syswait(.5) a continuacion del AddRequest() y aparentemente soluciona el problema, es como si el cliente estuviera enviando la data en paquetes ( como hace con sendfile() ), pero como se reciben cadenas de distintos clientes simultaneamente he tenido que implementar la TCtrlSocket para ir guardando la data en un array y poder procesarla secuencialmente. Sera que el Tctrl no tiene tiempo de procesar la data y esto lo que ocasiona el problema ?
No se si esto que he hecho sera confiable con una demanda de 15-20 clientes en forma simultanea que es lo que espero recibir en forma habitual.
Aqui tienes parte del codigo a ver si puedes ver algun error
Muchas gracias por la ayuda que puedas brindarme
Code: Select all | Expand
oSocket:bAccept := { | oSocket | oClient := TSocket():Accept( oSocket:nSocket ),;
cSocket:=cvaltochar(oClient:nSocket) ,;
tCtrl:AddRequest( oClient, {|oClient| OnClose(cSocket)},{|| NIL }),;
LogFile( 'cfrncoms.txt', { 'Cliente Conectado ...' + cvaltochar(oClient:nSocket)} ),;
[color=#FF4000]Syswait(.5)[/color] ,;
tCtrl:ServeClients() }
//.......metodo de la clase TcTrlSocket
METHOD ServeClients() CLASS TCtrlSocket
local nLong
local nServe
local cPart:=""
::lServerWorking := .T. // Serving
::nPendings := Len( ::aRequests )
WHILE Len( ::aRequests ) > 0
for nServe := 1 To Len(::aRequests)
if ::aRequests[ nServe ]:nSocket != 0
cData := ::aRequests [ nServe ]:GetData()
//..aqui tuve que agregar esto para que funcione ?????
[color=#FF4000]syswait(2)[/color]
if( !empty(cData) ,( cRespu := Valida(cData),;
::aRequests[ nServe ]:Senddata(cRespu) ,;
LogFile( 'cfrncoms.txt', { 'Respuesta Enviada...' + ;
cvaltochar(::aRequests[ nServe ]:nSocket)+ ;
' - Nro.Trx: '+cNroRef } ),;
::aRequests[ nServe ]:nSocket := 0 ),NIL)
endif
next
for nServe = 1 To Len( ::aRequests )
if ::aRequests [ nServe ]:nSocket == 0
if ::abEnd [ nServe ] != Nil // bEnd Action
Eval( ::abEnd [ nServe ] ) // End Socket
endif // ------------
aDel( ::aRequests , nServe ) // Delete from...
aSize( ::aRequests , Len( ::aRequests ) - 1 ) // ... list.
::nPendings := Len(::aRequests)
nServe-- // Delete from list
if Len( ::aRequests ) == 0 // list Empty?
exit
endif
endif
next
ENDDO
::lServerWorking:=.F. // Not Serving
DbCloseAll()
Return Nil
- Antonio Linares
- Site Admin
- Posts: 42520
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 31 times
- Been thanked: 75 times
- Contact:
Re: ENVIO DE DATOS CON TSOCKET
En principio se ve bien, tendrás que probarlo con esa carga de clientes y ver como se comporta
- Antonio Linares
- Site Admin
- Posts: 42520
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 31 times
- Been thanked: 75 times
- Contact: