Socketプログラミングのアンドロイド開発における応用

4360 ワード

Socketはネットワークプログラミングのインタフェースとして、通称「ソケット」と呼ばれ、通常はIPアドレスとポート番号を記述するために使用され、通信のためのハンドルである.アプリケーションは、通常、ソケットを介してネットワークに要求を発行したり、ネットワーク要求に応答したりします.Android開発では,クライアントとサーバ間の通信を実現するためにHTTPに対してネットワーク通信を行う方法の他に,Socketネットワークプログラミングが用いられている.Socket通信は、一般に、TCPプロトコルベースの信頼性の高い伝送と、UDPプロトコルベースの信頼性のない伝送の2つに分けられる.次に、TCPプロトコルを例に、アンドロイドアプリケーションにおけるクライアントとサーバ側の通信を実現するプロセスについて説明します.サーバとクライアントを表すサービスとクライアントの2つのアイテムを作成し、サービスでSocketActivityクラスを作成すると、サーバがTCP通信を実現するためのキーコードは次のように記述できます.
class ServerThread extends Tread{
     public void run{
         //    ServerSocket  ;
         ServerSocket serversocket=null;
         try{
            //    ServerSocket  ,       4567    ;
            serversocket=new ServerSocket(4567);
            //  ServerSocket accept()  ,           ;
            Socket socket=serversocket.accept();
            // Socket    InputStream  ;
            InputStream inputstream=socket.getInputStream();
            byte buffer[]=new byte[1024*4];
            int temp=0;
            // InputStream              ;
            while((temp=inputstream.read(buffer))!=-1){
                system.out.println(new String(buffer,0,temp));
           }
         }catch(IOException e){
             e.printStackTrace();
         }
         finally{
             try{
                serversocket.close();
             }catch(IOException e){
                e.printStackTrace();
             }
         }
     }
}

ClientでTCPClientクラスを作成します.クライアントとサーバが通信するキーコードは次のように記述できます.
public class TCPClient{
      public static void main(String args[]){
            try{
                //    Socket  ,       IP      ;
                Socket socket=new Socket("192.168.1.104",4567);
                //  InputStream        ;
                InputStream inputstream=new FileInputStream("f://file/words.txt");
                // socket    OutputStream;
                OutputStream outputstream=socket.getOutputStream();
                byte buffer[]=new byte[1024*4];
                int temp=0;
                // InputStream       ,    OutputStream  ;
                while((temp=inputstream.read(buffer))!=-1){
                     outputstream.write(buffer,0,temp);
                }
                outputstream.flush();
            }catch(IOException e){
                e.printStackTrace();
             }
      }
}