首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

[官方Demo]SocketDemo 通讯例子

2012-08-26 
[官方Demo]SocketDemo通信例子SocketDemo.java?/** * SocketDemo.java ** Copyright ?1998-2010 Research

[官方Demo]SocketDemo 通信例子

SocketDemo.java

?

/** * SocketDemo.java *  * Copyright ?1998-2010 Research In Motion Ltd. *  * Note: For the sake of simplicity, this sample application may not leverage * resource bundles and resource strings.  However, it is STRONGLY recommended * that application developers make use of the localization features available * within the BlackBerry development platform to ensure a seamless application * experience across a variety of languages and geographies.  For more information * on localizing your application, please refer to the BlackBerry Java Development * Environment Development Guide associated with this release. */package com.rim.samples.device.socketdemo;import net.rim.device.api.ui.*;/** * This sample enables client/server communication using a simple implementation  * of TCP sockets. The client application allows the user to select direct TCP as * the connection method.  If direct TCP is not selected, a proxy TCP connection * is opened using the BlackBerry MDS Connection Service. The server application  * can be found in com/rim/samples/server/socketdemo.  */public class SocketDemo extends UiApplication{       SocketDemoScreen _screen;        /**     * Entry point for application.     * @param Command line arguments.     */    public static void main(String[] args)    {        // Create a new instance of the application and make the currently        // running thread the application's event dispatch thread.        SocketDemo app = new SocketDemo();        app.enterEventDispatcher();    }        // Constructor    public SocketDemo()    {        // Create a new screen for the application.        _screen = new SocketDemoScreen();                // Push the screen onto the UI stack for rendering.        pushScreen(_screen);    }            /**     * Provides access to this application's UI screen     * @return This application's UI screen.     */    SocketDemoScreen getScreen()    {        return _screen;    }      }

?

SocketDemoScreen.java

?

/* * SocketDemoScreen.java * * Copyright ?1998-2010 Research In Motion Ltd. *  * Note: For the sake of simplicity, this sample application may not leverage * resource bundles and resource strings.  However, it is STRONGLY recommended * that application developers make use of the localization features available * within the BlackBerry development platform to ensure a seamless application * experience across a variety of languages and geographies.  For more information * on localizing your application, please refer to the BlackBerry Java Development * Environment Development Guide associated with this release. */package com.rim.samples.device.socketdemo;import net.rim.device.api.system.*;import net.rim.device.api.ui.*;import net.rim.device.api.ui.component.*;import net.rim.device.api.ui.container.*;/** * A MainScreen class to allow for user interaction. */public class SocketDemoScreen extends MainScreen{         private EditField _hostField;        private CheckboxField _useDirectTcpField;    private RichTextField _statusField;                  private StringBuffer _message;    private boolean _threadRunning = false;            // Constructor    public SocketDemoScreen()    {                  setTitle(new LabelField("Socket Demo"));                           add(new RichTextField("Enter local host name in the field below and select 'Go' from the menu." ,Field.NON_FOCUSABLE));        add(new SeparatorField());                // Need to get the local host name from the user because access to        // 'localhost' and 127.0.0.1 is restricted.        _hostField = new EditField("Local Host: " , "");            add(_hostField);                _useDirectTcpField = new CheckboxField("Use Direct TCP" , RadioInfo.getNetworkType() == RadioInfo.NETWORK_IDEN);        add(_useDirectTcpField);                _statusField = new RichTextField(Field.NON_FOCUSABLE);            add(_statusField);                _message = new StringBuffer();    }        /**    * Method to display a message to the user.    * @param msg The message to display.    */    void updateDisplay(final String msg)    {        UiApplication.getUiApplication().invokeLater(new Runnable()         {            public void run()            {                _message.append(msg);                _message.append('\n');                _statusField.setText(_message.toString());            }        });    }        /**     * Returns the text entered by the user.     * @return text entered by the user.     */    String getHostFieldText()    {        return _hostField.getText();    }        /**     * Indicates whether the direct TCP checkbox is checked.     * @return True if checkbox is checked, otherwise false.     */    boolean isDirectTCP()    {        return _useDirectTcpField.getChecked();    }        /**     * Setter for boolean _threadRunning     * @param running True if a ConnectThread is running, otherwise false.     */    void setThreadRunning(boolean running)    {        _threadRunning = running;    }       /**    *@see net.rim.device.api.ui.container.MainScreen#makeMenu(Menu,int)    */         protected void makeMenu(Menu menu, int instance)    {        // If a ConnectThread is running we won't add our menu item        if (!_threadRunning)        {            menu.add(_go);        }               super.makeMenu(menu, instance);    }       /**    * Prevent the save dialog from being displayed, nothing to save.    *     * @see net.rim.device.api.ui.container.MainScreen#onSavePrompt()    */    public boolean onSavePrompt()    {        return true;    }          /**    * Handles the user pressing ENTER while the     * 'use direct tcp' CheckboxField has focus.     *     * @see net.rim.device.api.ui.Screen#keyChar(char,int,int)    *     */    protected boolean keyChar( char key, int status, int time )    {        if ( key == Characters.ENTER )        {            Field fieldWithFocus = getFieldWithFocus();                         if(fieldWithFocus == _useDirectTcpField)            {                    if(_useDirectTcpField.getChecked())                    {                            _useDirectTcpField.setChecked(false);                    }                    else                    {                            _useDirectTcpField.setChecked(true);                    }                                                         return true; // We've consumed the event.                            }                    }                return super.keyChar( key, status, time ); // We'll let super handle the event.    }         /**    * An anonymous MenuItem class.    */         private MenuItem _go = new MenuItem("Go" , 11000, 0)    {        public void run()        {            // Don't do anything unless there is a host name in the _host field.            if (_hostField.getText().length() > 0)            {                new ConnectThread().start();                _threadRunning = true;                                 // Hide the virtual keyboard so the user can see status updates.                if(VirtualKeyboard.isSupported())                {                    VirtualKeyboard keyboard = getVirtualKeyboard();                    if(keyboard.getVisibility() != VirtualKeyboard.HIDE)                    {                        keyboard.setVisibility(VirtualKeyboard.HIDE);                    }                }                                                                     }            else            {                Dialog.ask(Dialog.D_OK, "Please enter a valid host name" );            }        }    };    }              
?

ConnectThread.java

/* * ConnectThread.java * * Copyright ?1998-2010 Research In Motion Ltd. *  * Note: For the sake of simplicity, this sample application may not leverage * resource bundles and resource strings.  However, it is STRONGLY recommended * that application developers make use of the localization features available * within the BlackBerry development platform to ensure a seamless application * experience across a variety of languages and geographies.  For more information * on localizing your application, please refer to the BlackBerry Java Development * Environment Development Guide associated with this release. */package com.rim.samples.device.socketdemo;import java.io.*;import javax.microedition.io.*;import net.rim.device.api.ui.*;/** * A thread class to handle communication with the server component. */public class ConnectThread extends Thread{           private InputStreamReader _in;    private OutputStreamWriter _out;            private SocketDemoScreen _screen;           // Constructor    public ConnectThread()    {        _screen = ((SocketDemo)UiApplication.getUiApplication()).getScreen();     }       /**    * Pass some data to the server and wait for a response.    * @param data The data to send.    */    private void exchange(String data) throws IOException    {        // Cache the length locally for better efficiency.        int length = data.length();                // Create an input array just big enough to hold the data        // (we're expecting the same string back that we send).        char[] input = new char[length];        _out.write(data, 0, length);        // Read character by character into the input array.        for (int i = 0; i < length; ++i)         {            input[i] = (char)_in.read();        }        // Hand the data to the parent class for updating the GUI. By explicitly         // creating the stringbuffer we can save a few object creations.        StringBuffer s = new StringBuffer();        s.append("Received: ") ;        s.append(input, 0, length);        _screen.updateDisplay(s.toString());    }   /**    * Implementation of Thread.    */    public void run()    {                StreamConnection connection = null;                       try        {            _screen.updateDisplay("Opening Connection...");            String url = "socket://" + _screen.getHostFieldText() + ":44444" + (_screen.isDirectTCP() ? ";deviceside=true" : "");                                                connection = (StreamConnection)Connector.open(url);            _screen.updateDisplay("Connection open");            _in = new InputStreamReader(connection.openInputStream());            _out = new OutputStreamWriter(connection.openOutputStream());                        // Send the HELLO string.            exchange("Hello");            // Execute further data exchange here...            // Send the GOODBYE string.            exchange("Goodbye and farewell");                                   _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)            {                            }        }    }}

?

?

[官方Demo]SocketDemo  通讯例子

热点排行