1

私と私の同僚の1人は、AndroidとiPhoneアプリケーション間の単純なソケット通信に取り組んでいます。これまでに達成したことは、別のスレッドでバイト配列を彼に送信し、サービスでバイト配列を受信できることです。しかし、私たちが直面している問題は、彼がソケットを閉じないと、彼が送信しているメッセージ全体を読むことができないということです。しかし、私はそのソケットが生きている必要があるので、データに問題がなかった場合や問題が発生した場合に、彼に応答を送信できます。これが私が彼のメッセージについて聞いている方法です:

thread =  new Thread(new Runnable() {
        public void run() {
            try {
                serverSocket = new ServerSocket(5000);
                while(state){
                        client = serverSocket.accept();
                        client.setKeepAlive(true);

                        // LOGS
                        Log.d("","receivedBufferSize : "+serverSocket.getReceiveBufferSize());
                        Log.d("","is connected : "+client.isConnected());
                        Log.d("","port : "+client.getPort());
                        Log.d("","ipadress : "+client.getInetAddress().toString());

                        InputStream is = client.getInputStream();

                        Log.d("","is Size : "+is.available());

                        byte[] bytes = toByteArray(is);
                        for(int i=0;i<bytes.length;i++){
                            Log.d("","bytes["+i+"] : "+bytes[i]);
                        }

                 }

                  serverSocket.close();
                  Log.d("","client socket : "+client.isClosed() + " serverSocket : "+serverSocket.isClosed());

             } catch (UnknownHostException e) {
                 e.printStackTrace();
             } catch (IOException e) {
                 e.printStackTrace();
             }
        }
    });
    thread.start();

したがって、彼がアプリケーションを閉じないか、ソケットを閉じない場合、私はそのログメッセージに座っています:Log.d("","is Size : "+is.available());そして実際には何も起こりません。彼がソケットを閉じた後、受信したバイト配列のバイトを見ることができます。

私が間違っていることや、これを引き起こす可能性のある提案/ヘルプについて何か考えはありますか?

前もって感謝します!

4

1 に答える 1

1

実際、問題はiPhone側にあり、ObjectiveCの実装に関する入力/出力ストリームの問題でした。したがって、このコードは正しく機能しています。

于 2012-08-14T09:01:08.097 に答える