Promblemi applet - ricezione dati

  • Creatore Discussione Creatore Discussione ExSoax
  • Data di inizio Data di inizio

ExSoax

Nuovo Utente
20 Ott 2009
5
0
0
Salve a tutti , sto creando un Mini-Gioco multiplayer in tempo reale e quindi ho creato un applet e un server che si scambiano dati che poi comunicano al db mysql. Ho un problema però... il server funziona perfettamente e non ha errori, legge il db e tutto, mi ci sono connesso con un telnet e funziona alla perfezione come dovrebbe, invece la applet invia i dati, ma non riesce a riceverli, la applet è firmata e ho provato anche con altri server, ma non va... Ho notato che prima non inviava neanche i dati fino a quando ho tolto il PrintWriter e ho messo PrintStream. Ecco il codice :

Codice:
    import java.applet.*;
    import java.io.*;
    import java.net.*;
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;

    public class ExploreX extends Applet{

        public Graphics outscreeng;
        public Image outscreen;
        public int x,y;
        public boolean log = false;
        public Socket client;
        public String username;
        public String password;
        public String ip;public int porta;

       public static void alert(String title, String message){

       JFrame window = new JFrame(title);
       window.setBounds(400,400,210,120);
       JTextArea area = new JTextArea(message,10,10);
       area.setEditable(false);
       window.add(area);
       window.show();


       }


       public void init(){

        ip = getParameter("ip_address");
        porta = Integer.parseInt(getParameter("game_port"));
        username = getParameter("username");
        password = getParameter("password");
        outscreen = createImage(this.size().width,this.size().height);
        outscreeng = outscreen.getGraphics();

             try {

                client = new Socket(ip, porta);
                BufferedReader ClientI = new BufferedReader(new InputStreamReader(client.getInputStream()));
                BufferedWriter ClientO = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));

                ClientO.write(username+":"+password+"\n");



                String result = ClientI.readLine();

                System.out.println("Result : " + result);

                alert("Result",result);

                stop();




            } catch (Exception ex) {

                alert("Errore",ex.getMessage());
                stop();

            }


      }
     

       public void paint(Graphics g){

      if(log == true){


       outscreeng.drawRect(x,y,50,50);
       g.drawImage(outscreen,0,0,this);


      }else{


      }

       
       }

       public void update(){

       outscreeng.clearRect(0,0,this.size().width,this.size().height);
       outscreeng.drawRect(0,0,(this.size().width-2),(this.size().height-2));

       }


    }


Se sapete aiutarmi postate please... Grazie! Ciao!
 
Ciao ExSoax e benvenuto nel forum.
Da quanto ho capito l' applet si ferma String result = ClientI.readLine();
e rimane in attesa della risposta dal server. Secondo me dovresti inserire dopo che fai un write() richiamare il metodo flush() nel tuo caso:
Codice:
ClientO.write(username+":"+password+"\n");
ClientO.flush();

Dovrebbe risolvere il probelma.

Facci sapere.

Ciao
 
No , nn funziona ancora.. ho messo il flush(), ma non va , prima non scriveva neanche i dati con il PrintWriter fino a quando non ho messo PrintStream è come se non funziona l'IO
 
Ultima modifica:
Comunque nel codice che hai posto non c'è il PrintStream. In questo caso sembra comunque corretto. Non conosco l' implementazione del server, ma da come hai spiegato tu che con un applicazione come telnet funziona, allora il problema riguarda la scrittura dei dati nello stream, cioè questa non viene terminata, ho il server non riceve correttamente la stringa e quindi si aspetta ancora qualche altro carattere. Secondo me potresti fare un ulteriore prova inserendo Carriage Return/Line Feed (CR/LF) cioè "\r\n" in questo modo:
Codice:
ClientO.write(username+":"+password+"\r\n");
tu hai inserito solo l' "\n"
 
Ok ora prova e ti faccio sapere, comunque si mi sono sbagliato, ora non sto utilizzando il PrintStream, lo stavo facendo prima

Niente non va, provo a riscrivere l'applet da capo...
 
Ultima modifica:
Ho appena creato un programma normale in java per connettermi al server e provare in qualche altro modo il gioco, e ho scoperto che il problema non è solo della applet ,ma di tutti i client Java, non credo siano bloccati dal firewall visto che lo chiuso e riaperto per controllare...

Ok ho ricontrollato, l'applicazione riesco a farla connettere su siti internet e ricevere senza problemi , allore l'errore sarà nel server
 
Ultima modifica:
Ok ho risolto , l'errore era nel server, avevo un PrintWriter e l'ho sostituito con un PrintStream, ora funziona benissimo..
 

Discussioni simili