2011-07-28 5 views
2

Je suis nouveau à la programmation et j'essaye de construire un client IRC BlackBerry, je l'ai fait se connecter à un serveur, rejoindre un canal et dire quelque chose, mais comment puis-je recevoir des messages? Je ne sais pas comment faire une boucle pour attendre les messages, quelqu'un peut-il m'aider? voici mon code:programmation Java Sockets et Blackberry

package com.rim.samples.device.socketdemo; 

import java.io.*; 
import javax.microedition.io.*; 
import net.rim.device.api.ui.*; 

public class ConnectThread extends Thread 
{ 
    private InputStream _in; 
    private OutputStreamWriter _out;   
    private SocketDemoScreen _screen; 

    // Constructor 
    public ConnectThread() 
    { 
     _screen = ((SocketDemo)UiApplication.getUiApplication()).getScreen(); 
    } 

    public void run() 
    {   
     StreamConnection connection = null;  
     String user = "Cegooow"; 
     String channel = "#oi"; 

     try 
     { 
      _screen.updateDisplay("Opening Connection..."); 
      String url = "socket://" + _screen.getHostFieldText() + ":6667" + (_screen.isDirectTCP() ? ";deviceside=true" : "");          
      connection = (StreamConnection)Connector.open(url); 
      _screen.updateDisplay("Connection open"); 

      _in = connection.openInputStream(); 

      _out = new OutputStreamWriter(connection.openOutputStream());    
      StringBuffer s = new StringBuffer(); 

      _out.write("NICK " + _screen.getNickText() + "\r\n"); 
      _out.write("USER " + user + "8 * : Java Bot\r\n"); 
      _out.write("JOIN " + channel + "\r\n"); 
      _out.write("PRIVMSG " + channel + " " + _screen.getMessageFieldText() + "\r\n"); 
      _screen.updateDisplay("Done!"); 
     } 
     catch(IOException e) 
     { 
      System.err.println(e.toString()); 
     } 
     finally 
     {    
      _screen.setThreadRunning(false); 

      try 
      {    
       _in.close();    
      } 
      catch(IOException ioe) 
      {     
      } 
      try 
      {  
       _out.close();    
      } 
      catch(IOException ioe) 
      {    
      } 
      try 
      {    
       connection.close(); 
      } 
      catch(IOException ioe) 
      {     
      } 
     } 
    } 
} 

J'ai utilisé les prises échantillon de démonstration sur Blackerry jre, grâce

Répondre

0

Dans votre code, vous avez un _out de OutputStreamWriter d'écrire sur le serveur, le _En de connexion entrante (InputStream) est utilisé . Vous devez vous attendre toutes les données entrantes là ... exemple le plus simple que je peux penser serait comme ceci:

// process the inputstream after writing to _out - in single threaded app 
Reader reader = new InputStreamReader(_in); 
int data; 
while((data = reader.read()) != -1){ 
    System.out.println((char) data); // do something with the char 
} 
reader.close(); 

Dans la pratique, il serait préférable d'utiliser un BufferedReader. En outre, si vous créez une application de discussion, il peut être utile de créer un nouveau thread pour traiter les données entrantes et un autre thread pour les données sortantes.

0

Une fois que vous obtenez votre boucle lecteur de flux d'entrée, vous pouvez gérer jusqu'à ce qu'une connexion ferme

BufferedReader reader = new BufferedReader(_in); 
while(true) { 
    String line = reader.readLine(); 
    // do something... 
}