Android apps浅析02-Android IM:携帯電話QQのようなインスタント通信オープンソース実現


Android apps浅析02-Android IM:携帯電話QQのようなインスタント通信オープンソース実現
これはAndroid上の簡単なIMアプリケーションの実行時であり、アプリケーションはHTTP要求をサーバに送信し、PHPとMySQLで、他の友人の状態とデータを検証、登録、取得して実現し、他のデバイスの他のアプリケーションと通信ソケットを通じて接続します.
 
1.データベースは2つのテーブルのみ:友人テーブルとユーザーテーブル:
CREATE TABLE  `friends` (
  `Id` int(10) unsigned NOT NULL auto_increment,
  `providerId` int(10) unsigned NOT NULL default '0',
  `requestId` int(10) unsigned NOT NULL default '0',
  `status` binary(1) NOT NULL default '0',
  PRIMARY KEY  (`Id`),
  UNIQUE KEY `Index_3` (`providerId`,`requestId`),
  KEY `Index_2` (`providerId`,`requestId`,`status`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='providerId is the Id of the users who wish to be friend with';

CREATE TABLE  `users` (
  `Id` int(10) unsigned NOT NULL auto_increment,
  `username` varchar(45) NOT NULL default '',
  `password` varchar(32) NOT NULL default '',
  `email` varchar(45) NOT NULL default '',
  `date` datetime NOT NULL default '0000-00-00 00:00:00',
  `status` tinyint(3) unsigned NOT NULL default '0',
  `authenticationTime` datetime NOT NULL default '0000-00-00 00:00:00',
  `userKey` varchar(32) NOT NULL default '',
  `IP` varchar(45) NOT NULL default '',
  `port` int(10) unsigned NOT NULL default '0',
  PRIMARY KEY  (`Id`),
  UNIQUE KEY `Index_2` (`username`),
  KEY `Index_3` (`authenticationTime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 
2.コアコードは、Http requestとSocketを送信します.
 public String sendHttpRequest(String params)
 
        {               
 
                URL url;
 
                String result = new String();
 
                try 
 
                {
 
                        url = new URL(AUTHENTICATION_SERVER_ADDRESS);
 
                        HttpURLConnection connection;
 
                        connection = (HttpURLConnection) url.openConnection();
 
                        connection.setDoOutput(true);
 
                        
 
                        PrintWriter out = new PrintWriter(connection.getOutputStream());
 
                        
 
                        out.println(params);
 
                        out.close();
 

 
                        BufferedReader in = new BufferedReader(
 
                                        new InputStreamReader(
 
                                                        connection.getInputStream()));
 
                        String inputLine;
 

 
                        while ((inputLine = in.readLine()) != null) {
 
                                result = result.concat(inputLine);                              
 
                        }
 
                        in.close();                     
 
                } 
 
                catch (MalformedURLException e) {
 
                        e.printStackTrace();
 
                } 
 
                catch (IOException e) {
 
                        e.printStackTrace();
 
                }                       
 
                
 
                if (result.length() == 0) {
 
                        result = HTTP_REQUEST_FAILED;
 
                }
 
                
 
                return result;
 
                
 
        
 
        }
 

 

 

 
        public boolean sendMessage(String message, String ip, int port) 
 
        {
 
                try {
 
                        
 
                        
 
                        String[] str = ip.split("\\.");
 
                        
 
                        byte[] IP = new byte[str.length];
 
                        
 
                        for (int i = 0; i < str.length; i++) {
 
                                
 
                                IP[i] = (byte) Integer.parseInt(str[i]);                                
 
                        }
 
                        Socket socket = getSocket(InetAddress.getByAddress(IP), port);
 
                        if (socket == null) {
 
                                return false;
 
                        }
 
                
 
                        PrintWriter out = null;
 
                        out = new PrintWriter(socket.getOutputStream(), true);
 
                        
 
                        out.println(message);
 
                } catch (UnknownHostException e) {                      
 
                        return false;
 
                        //e.printStackTrace();
 
                } catch (IOException e) {
 
                        return false;                   
 
                        //e.printStackTrace();
 
                }
 
                
 
                return true;            
 
        }

 3.その他の情報:
http requestとsocketを使用して実装されたAndroidインスタント通信アプリケーションの元のソース:https://code.google.com/p/simple-android-instant-messaging-application/最新ソース:https://github.com/Pirngruber/AndroidIMソースのダウンロード:http://download.csdn.net/user/yangzhenping初期作成者が提供するソースコードのダウンロード:http://download.csdn.net/detail/yangzhenping/8397989