java.io.StreamCorruptedException на эмуляторах Android - PullRequest
0 голосов
/ 18 марта 2012

Я пытаюсь отправить объекты через сокеты в эмуляторах Android. Каждый эмулятор отправляет объекты себе и двум другим эмуляторам. Прослушивание и отправка объектов находятся в двух разных портах и ​​потоках. Я получаю исключение java.io.StreamCorruptedException после отправки первого пакета. В некоторых случаях объекты, отправленные другим эмуляторам, достигают, но отправленный сам по себе объект никогда не достигает себя после отправки первого объекта. Я проверил мой объект, отправляющий и получающий код с другими, и они сказали, что не видят проблем, но я получаю исключение последовательно. Этот пост является последним средством. Пожалуйста, помогите!

Это мой серверный поток, который продолжает слушать -

public void StartListening() {
    new Thread(){
        public void run(){
            //packet p = null;
            try {
                ListenSocket =  new ServerSocket(L_PORT_NUM);
                packet p= null;
                Log.i("init","entering the listen while loop");
                while(true){
                    Socket TempSocket1 = ListenSocket.accept();
                    ois = new ObjectInputStream(TempSocket1.getInputStream());
                    p = (packet) ois.readObject();
                    decide(p);
                    ois.close();
                    TempSocket1.close();
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }
    }.start();
}

метод define () порождает новый поток. Поэтому при вызове вышеуказанного метода задержка не возникает.

Это в той же программе, но совершенно другой поток

    public void myWriteObject(packet m) throws IOException{
    final packet temp = m;
    //Create a new thread,Since network operations is not advised in main thread.
    new Thread(){
        public void run() {
            Log.i("myWriteObject","--------- ");

            int i=NUM_SYS;
            int temp_portNum=11108;

            while(i!=0){
                try {
                    Socket SendSocket1= new Socket("10.0.2.2",temp_portNum);
                    oos = new ObjectOutputStream(SendSocket1.getOutputStream());
                    oos.writeObject(temp);
                    oos.flush();
                    oos.close();
                    SendSocket1.close();

                    Log.i("myWriteObject","OBJECT SENT TO -"+temp_portNum);
                    i--;
                    temp_portNum=temp_portNum+4;
                    Thread.sleep(1000);

                } catch (UnknownHostException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }.start();

}

Я получаю исключение java.io.StreamCorruptedException. Я попробовал, закрытие, промывка и еще много чего посоветовал в очках. Но я все еще получаю эту ошибку. Вот фрагмент журнала ошибок - 03-17 19:18:23.361: I/CLock(int n)(1638): clock initialized0 0 0 03-17 19:18:23.370: I/init(1638): entered oncreate 03-17 19:18:23.620: I/init(1638): entering the listen while loop 03-17 19:18:24.001: D/gralloc_goldfish(1638): Emulator without GPU emulation detected. 03-17 19:18:24.420: I/ActivityManager(100): Displayed project1.DistSys.App/.Project1Activity: +2s526ms 03-17 19:18:24.981: W/NetworkManagementSocketTagger(100): setKernelCountSet(10009, 0) failed with errno -2 03-17 19:18:33.961: I/TEST1(1638): sending to EVERYONE from TEST 1-1 0 0 5554:1 03-17 19:18:33.991: I/myWriteObject(1638): --------- 03-17 19:18:34.102: I/TEST1(1638): sending to EVERYONE from TEST 1-2 0 0 5554:2 03-17 19:18:34.120: I/myWriteObject(1638): --------- 03-17 19:18:34.500: I/myWriteObject(1638): OBJECT SENT TO -11108 03-17 19:18:34.500: I/INCOMING(1638): msg value 5554:0SEQUENCER MSG value 0seq_no value 0get key stamp 5554:0clock 1 0 0 03-17 19:18:34.520: W/System.err(1638): java.io.StreamCorruptedException 03-17 19:18:34.530: I/DECIDE(1638): packets seq_no value is-0 5554:0 5554:0 03-17 19:18:34.550: W/System.err(1638): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1528) 03-17 19:18:34.580: W/System.err(1638): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481) 03-17 19:18:34.580: W/System.err(1638): at project1.DistSys.App.Project1Activity$9.run(Project1Activity.java:285) 03-17 19:18:34.600: I/DECIDE-CLKSTATUS(1638): INSERT TO DB port-clock-5554 2 0 0 03-17 19:18:34.820: W/System.err(1638): java.io.EOFException 03-17 19:18:34.840: W/System.err(1638): at java.io.DataInputStream.readByte(DataInputStream.java:98) 03-17 19:18:34.850: W/System.err(1638): at java.io.ObjectInputStream.nextTC(ObjectInputStream.java:506) 03-17 19:18:34.850: W/System.err(1638): at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:778) 03-17 19:18:34.850: W/System.err(1638): at java.io.ObjectInputStream.readObject(ObjectInputStream.java:1999) 03-17 19:18:34.861: W/System.err(1638): at java.io.ObjectInputStream.readObject(ObjectInputStream.java:1956) 03-17 19:18:34.861: W/System.err(1638): at java.io.ObjectInputStream.readFieldValues(ObjectInputStream.java:1137) 03-17 19:18:34.880: W/System.err(1638): at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:455) 03-17 19:18:34.890: W/System.err(1638): at java.io.ObjectInputStream.readObjectForClass(ObjectInputStream.java:1369) 03-17 19:18:34.977: W/System.err(1638): at java.io.ObjectInputStream.readHierarchy(ObjectInputStream.java:1266) 03-17 19:18:34.977: W/System.err(1638): at java.io.ObjectInputStream.readNewObject(ObjectInputStream.java:1851) 03-17 19:18:34.977: W/System.err(1638): at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:787) 03-17 19:18:34.991: W/System.err(1638): at java.io.ObjectInputStream.readObject(ObjectInputStream.java:1999) 03-17 19:18:34.991: W/System.err(1638): at java.io.ObjectInputStream.readObject(ObjectInputStream.java:1956) 03-17 19:18:35.011: W/System.err(1638): at

1 Ответ

0 голосов
/ 19 марта 2012

Решил проблему - я объявил objectinputstream и objectoutputstream как частные и сделал их глобальными.Это как-то испортило поток.Сделав их локальными, ошибка была устранена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...