Newsgroup: it.comp.lang.delphi
Titolo: TClientSocket

Ciao a tutti,
utilizzo un oggetto TClientSocket per lo scambio di dati in rete, se il programma viene usato su un PC con WinXP non ci sono problemi, se viene utilizzato su un PC con Win2000 perde dei caratteri in ricezione.
Se avete qualche idea ve ne sarei molto grato (naturalmente preferirei non dover cambiare sistema operaztivo ai PC)
Ciao e grazie a tutti per la collaborazione.
-- 
Questo articolo e` stato inviato dal sito web 
http://www.nonsolonews.it

 utilizzato su un PC con Win2000 perde dei caratteri in ricezione.
Con questi pochi dati e' difficile risponderti. Il ClientSocket in che 
modalita' e' usato (Blocking,nonBlocking)? Un po' di codice da valutare non 
farebbe male...
Ciao Giorgio 

Giorgio Padoan ha scritto:

la modalità è NonBlocking, di seguito il codice:
************************************************************
procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
var ss,s,st,sn,snn,sx : string;
    f : textfile;
    n,i : integer;
    a : single;
    insieme : set of char;
begin
  insieme:=['0','1','2','3','4','5','6','7','8','9'];
  memo1.Lines.Add('READ');
  ss:=clientsocket1.Socket.ReceiveText;
  memo1.Lines.Add(clientsocket1.Socket.ReceiveText);
  memo1.Lines.Add('ss '+ss);
  if pos('Content-Length:',ss)>0 then begin
     snn:='';
     n:=pos('Content-Length:',ss);
     sn:=copy(ss,n+16,5);
     for i:=1 to 5 do
       if sn[i] in insieme then snn:=snn+sn[i];
       l_mes_socket_client:=strtoint(snn);
  end;
  if pos('Date:',ss)>0 then begin
     n:=pos('Date:',ss);
     ss:=copy(ss,n+39,(length(ss)-(n+38)));
     memo1.Lines.Add('ss: '+ss);
  end;
  risposta_socket_client:=risposta_socket_client+ss;
  memo1.Lines.Add('LUNGHEZZA MESSAGGIO: '+inttostr(l_mes_socket_client));
  memo1.Lines.Add('LUNGHEZZA STRINGA  : '+inttostr(length(risposta_socket_client)));
  if length(risposta_socket_client)=l_mes_socket_client then begin
     socket_client_read:=TRUE;
     clientsocket1.Active:=FALSE;
     memo1.Lines.Add('FINE RICEZIONE DA SOCKET');
     assignfile(f,'test.txt');
     rewrite(f);
     writeln(f,risposta_socket_client);
     closefile(f);
  end;
  append_filehttp('Risposta Mie : '+risposta_socket_client);
end;
************************************************************
ciao e grazie ancora


  memo1.Lines.Add(clientsocket1.Socket.ReceiveText);
Non puoi in un unico evento OnRead eseguire due ReceiveText, inoltre va' 
usato il socket del secondo parametro:
ss:=Socket.ReceiveText;
Ciao Giorgio 

Giorgio Padoan ha scritto:

Grazie,
ma perchè su winXP funziona mentre su win2000 solo con pacchetti di dati consistenti sbaglia?
ancora ciao e grazie


 consistenti sbaglia?
.. misteri della fede... :)
Ciao Giorgio 

Ciao. Ho avuto anche io lo stesso problema. Stavo sviluppando il mio 
secondo simulatore (ATCS, vedi 
www.brambo.it
). E' scritto in delphi(5). 
Le stringhe arrivavano una si e una no .... più o meno.
Controlla il BIOS e togli (disabilita) HYPERTHREADING.
Riavvia e riprova... 
Il mio problema era questo ...
Ciao.
AtcBrambo
--- posted by geoForum on 
http://www.delphiedintorni.it

PS. 
La Fede, come dice Giorgio, è un' altra cosa. Dio non è un PC e non 
credo "giri" su piattaforma Windows ...


 Il mio problema era questo ...
Non metto in dubbio quanto dici, ma ripeto ad ogni evento onread deve essere 
eseguita una SOLA lettura sul socket altrimenti non rispettiamo la logica di 
implementazione del componente stesso.
Ciao Giorgio 

Ops.... 
Bravo Giorgio....
in effetti mi era sfuggita la doppia chimata "ReceiveText"
Prova con 
.....
ss:=clientsocket1.Socket.ReceiveText;
//memo1.Lines.Add(clientsocket1.Socket.ReceiveText);
memo1.Lines.Add(ss);
.....
Magari il tuo problema č solo questo .....
Ciao
