Java-сокеты и программирование Blackberry - PullRequest
2 голосов
/ 28 июля 2011

Я новичок в программировании и пытаюсь создать IRC-клиент 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)
            {                
            }
        }
    }
}

Я использовал демонстрационный пример с сокетами на blackerry jre, спасибо

Ответы [ 2 ]

0 голосов
/ 12 августа 2011

Получив дескриптор считывателя входного потока, вы можете зацикливаться до тех пор, пока соединение не закроется

BufferedReader reader = new BufferedReader(_in);
while(true) {
    String line = reader.readLine();
    // do something...
}
0 голосов
/ 29 июля 2011

В вашем коде у вас есть OutputStreamWriter _out для записи на сервер, входящее соединение _in (InputStream) не используется. Вы должны ожидать каких-либо входящих данных там ... Простейший пример, который я могу придумать, будет таким:

// 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();

На практике было бы лучше использовать BufferedReader. Кроме того, если вы создаете приложение чата, может быть полезно создать новый поток для обработки входящих данных и другой поток для исходящих данных.

...