Newsgroup: it.comp.java
Titolo: aiuto-socket

.Salve a tutti, 
innanzitutto scusatemi perchè non posto spesso sui newsgroup e se lo faccio
è perchè ho bisogno di una mano (sono sincero)..Dopo questa umile premessa,
illustro subito il mio problema:
->PROBLEMA:
Sto cercando di fare un programma che sia in grado di far comunicare 2 persone
attraverso un'interfaccia testuale (una specie di mini IRC,tanto per capirci)
Fin qui ci siete? Ohh,bene..Ho cercato di risolvere il tutto con questa 
soluzione, due classi estenzioni di thread(una per la spedizione e una per la 
ricezione) e una classe principale..Adesso il problema sorge se mentre uno
dei due interlocutori sta scrivendo la stringa che vuole "spedire" ma non la ha
ancora completata e l'altro ne invia una, la mia soluzione è quella di cancellare
ciò che il primo sta scrivendo mediante una serie di'\b',scrivere la stringa 
ricevuta e poi riscrivere quella incompleta..Tutto fila ma il codice non funonzia..
Ripeto:non funonzia..Quello che vorrei realizzare è tutto in modalità testo,
niente interfaccie grafiche o frame, anche se gradisco suggerimenti anche su questi..
Allego il codice:
//  FILE chat.java
//
//  (c) by TANO..
import java.io.*;
import java.net.*;
class send extends Thread{
  private Socket socket;
  private PrintStream out;
  private StringBuffer share;
  send(Socket socket,StringBuffer share)
  {
    this.socket=socket;
    this.share=share;
    try
    {
      out=new PrintStream(socket.getOutputStream());
    }
    catch(IOException e)
    {
      System.out.println("-> A.IOEx in class send..");
    }
    this.start();
  }
  public void run()
  {
    char key=' ';
    String line;
    do
    {
      share.setLength(0);
      do
      {
        try
        {
          key=(char)System.in.read();
        }
        catch(IOException e)
        {
          System.out.println("->B.IOEx in class send");
        }
        share.append(key);
      }
      while(key!='\n');
      line=share.toString();
      out.print(line);
    }
    while(line!=null);
  }
}
class receive extends Thread{
  private Socket socket;
  private DataInputStream in;
  private StringBuffer share;
  receive(Socket socket,StringBuffer share)
  {
    this.socket=socket;
    this.share=share;
    try
    {
      in=new DataInputStream(socket.getInputStream());
    }
    catch(IOException e)
    {
      System.out.println("-> C.IOEx in class receive..");
    }
    this.start();
  }
  public void run()
  {
    String line=null;
    int i;
    do
    {
      try
      {
        line=in.readLine();
      }
      catch(IOException e)
      {
        try
        {
          socket.close();
        }
        catch(IOException ee)
        {
          System.out.println("IETTILU!!");
        }
        System.exit(0);
      }
      for(i=0;i<share.length();i++)
        System.out.print("b");
      System.out.print(line);
      System.out.println(share);
    }
    while(line!=null);
  }
}
class chat{
  final static int PORT=23;
  public static void main(String arghh[])
  {
    Socket socket=null;
    ServerSocket serversocket;
    StringBuffer share=new StringBuffer();
    System.out.println("\n  CHAT.. - (c) by TANO");
    try
    {
      socket=new Socket("localhost",PORT);
      System.out.println("->CLIENT");
    }
    catch(IOException e)
    {
      try
      {
        serversocket=new ServerSocket(PORT,1);
        System.out.println("->SERVER");
        socket=serversocket.accept();
      }
      catch(IOException ee)
      {
        System.out.println(" IETTILU!!");
      }
    }
    new send(socket,share);
    new receive(socket,share);
  }
}
Ah,mentre che ci siete(mentre che non si dice!!), potreste dirmi come
posso identificare un banale computer all'interno di internet?(per il
mio codice ho appositamente scritto "localhost"..)
Grazie a tutti!!
                tano

 ha scritto nel messaggio
news:1104_998615700@e6o9v0...



tenterò di spiegartelo,ma ho le idee un pò confuse:
.l'oggetto di tipo StringBuffer (share) che io passo è in comune fra le due classi send e receive in modo che quando l'utente digita un carattere sulla tastiera questo viene appeso alla stringa corrente(che quando
viene battuto invio viene spedita), mentre la classe receive se ne serve per sapere quanti caratteri sono stati già battuti in modo da poterli riscrivere dopo aver visualizzato qualsiasi stringa ricevuta(quando riceve
una stringa dovrebbe cancellare la riga corrente non ancora completata,mediante una serie di '\b', e  poi visualizzare quella ricevuta e di nuovo quella incompleta..)Che confusione..
-> ESEMPIO:
// tu hai già battuto:
cia
// ricevi una stringa:"tano tano ma che fai?"
// allora il programma cancella ciò che hai battuto(cia):
// e scrive la stringa ricevuta:
tano tano ma che fai?
// dopo riscrive la srtinga incompleta:
tano tano ma che fai?
cia
// tu batti 'o' e invio:
tano tano ma che fai?
ciao
[il cursore si trova qui]
----------------------------------
se hai soluzioni meno incasinate proponimele, perchè questa effettivamente sembra un pò assurda..
il problema per me sorge quando tu non hai ancora completato la riga e ricevi qualcosa..
AIUTO!!
grazie..
           tano

 > Sarà il caldo [CUT]
Scusami non offenderti ma devo proprio dirtelo: impara a quotare.
Senza rancore,
Maurizio.