Newsgroup: it.comp.lang.delphi
Titolo: Client/Server/Client

Devo realizzare una struttura del genere client-server-client, in cui i
due clinet devono scambiarsi dati passando attrverso un server. A tale
proposito pongo alcune domande:
1)se ad un server voglio far connettere piu client ma su porte
diverse, perche quello che il client1 manda al server tramite la
porta1, il server lo dovra inviare al client2 connesso sulla
porta2,devo usare piu componenti indy TCPServer giusto?
2)supponiamo che il clinet voglia inviare una stringa al server, posso
realizzare cio con l'evento
   TCPClient.WriteBuffer(line, sizeOf(line), true);
dove line è la stringa che voglio inviare e ovviamente nel lato server
ci sara
Athread.Connection.ReadBuffer(line. sizeof(line));
se cosi va bene una volta letta tale stringa potrei gestirla come
voglio e anche rinviarla ad un altro client su un altra porta con
Athread.Connection.WriteBuffer(line, sizeOf(line), true);
puo funzionare e realizzare cosi il passaggio del flusso da una porta
all'altra 
grazie

    TCPClient.WriteBuffer(line, sizeOf(line), true);
Utilizza sempre i TStream: manda sempre la dimensione dei dati che stai
passando e il contenuto dello stream con i dati.  E' il modo più sicuro di
comunicare.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

una volta che al server giunge il flusso su una porta come posso
deviarlo su l'altra? Su tale flusso nn devo compiere nessun tipo di
operazione lo devo solo far uscire da un'altra parte. Con il metodo
writebuffer o writestream nn risolvo perche scrive su entrambi le
porte....
hai qualche idea

 deviarlo su l'altra?
Tu leggi i dati da una connessione client connessa alla porta A e 
scrivi i dati (con WriteBuffer o WriteStream) mediante la 
connessione client connessa alla porta B.  Non mi sembra così 
complicato.  A partire da un TIdPeerThread, puoi capire su che 
porta il client è collegato.

>>A partire da un TIdPeerThread, puoi capire >>su che porta il client è collegato.
Io uso un TIdPeerThread nell'evente OnExcute
con
Athread.connection.readbuffer();
per leggere cio che arriva poi uso
Athread.connection.writebudùffer()
per inviare i dati ma nn arrivano all'altro client.
Dove e che sbaglio? Hai un esempio o un link da poter vedere una cosa
simile?

 per inviare i dati ma nn arrivano all'altro client.
Certo che non arrivano, stai scrivendo sulla stessa connessione 
dalla quale leggi!  Tu devi sapere qual č il TIdPeerThread 
connesso su una porta e qual č il TIdPeerThread connesso 
sull'altra porta.  Sull'OnExecute del server devi determinare se 
AThread č connesso su una porta 
(AThread.Connection.Socket.Binding.Port) e in tal caso leggi o 
sull'altra e in tal caso scrivi.

>(AThread.Connection.Socket.Binding.Port) e >>in tal caso leggi o sull'altra e in tal caso scrivi
questo andrebbe bene se devo leggere da una porta e scrivere su
un'altra e basta, ma io quello che ricevo da una porta lo devo mandare
su l'altra e viceversa.

 su l'altra e viceversa.
Uh ? non capisco dove sia la differenza, sinceramente.

Ho anche ripostato speriamo nn si arrabbino troppo!!
Evidentemente sbaglio io il codice, individuo chi manda il flusso
riesco a leggerlo ma poi quando scivo come gli faccio a dire di
scrivere sulla porta2, quando sono ancora nella condizione in cui sto
leggendo sulla porta 1.
Ovviamente con
AThread.Connection.socket.bindings..port:=1050 (l'altra porta)
ovviamente sto cambiando la porta 1 e nn la 2 dove voglio che escano i
dati!!

 Ho anche ripostato speriamo nn si arrabbino troppo!!
Ti ho scritto il codice di esempio sia del client che del server.