Androidはサービス側として、PCはメッセージをプッシュします

2900 ワード

需要説明:需要は大体このような赤外線が門限を活性化するので、門限はPCを活性化して、PCはAndroidを活性化して、AndroidはEPCIDをスキャンして
第一歩:Android側のServer Socketを構築し、メッセージを受け入れる
サーバソケットを作成します.リスニングポートは9999で、使用されていないポートはいずれかです.
private static void startService() {
    try {
        //   ServerSocket
        ServerSocket serverSocket = new ServerSocket(9999);
        Log.e("xxx","--     ,     9999--");
        //     ,       
        while (true) {
            Log.e("xxx","--       --");
            Socket socket = serverSocket.accept(); //       
            Log.e("xxx","       :" + socket);
            startReader(socket);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

====
クライアントから送信されたメッセージを受信
private static void startReader(final Socket socket) {
    new Thread() {
        @Override
        public void run() {
            DataInputStream reader;
            try {
                //      
                reader = new DataInputStream(socket.getInputStream());
                while (true) {
                    Log.e("xxx","*       *");
                    //     
                    String msg = reader.readUTF();
                    Log.e("xxx","         :" + msg);
                    //        ,          
                    DataOutputStream ps = new DataOutputStream(socket.getOutputStream());
                    ps.writeUTF("         " + msg);
                    ps.flush();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }.start();
}

以上の2つの方法は簡単なAndroid側のサーバーで、比較的短いので、コメントを見て理解するのは難しくないはずです.
ステップ2、接続の作成、メッセージの送信
もう1台のサービス側であるAndroidデバイスを接続
    new Thread() {
        @Override
        public void run() {
            try {
                socket = new Socket("192.168.7.125", 9999);
                Log.e("xxx", "    :" + socket);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }.start();

メッセージの送信
new Thread() {
        @Override
        public void run() {

            try {
                // socket.getInputStream()
                DataOutputStream writer = new DataOutputStream(socket.getOutputStream());

                writer.writeUTF("    "); //    UTF-8   

                Log.e("xxx","    ");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }.start();

ここで、私はもう1台のAndroid携帯電話をクライアントとして、サービス側に接続し、メッセージを送信しています.前回は成功しなかったエラーメッセージがルーティングされていなかったことに注意してください.その後、pingしてシミュレータのIPが全然通じないことに気づきました.だから、まずネットワークが接続されていることを確認し、Appにはネットワーク権限が必要で、ネットワークがサブスレッドで操作されていることを覚えています.また、クライアントは通常、リンクが切断されていないことを確認するために、サービス側にデータを定期的に送信します.