2012-03-18 74 views
-2

我想通過android模擬器中的套接字發送對象。 每個仿真器都將對象發送給自己和另外兩個仿真器。 對象的偵聽和發送位於兩個不同的端口和線程中。 我發送第一個數據包後發生java.io.StreamCorruptedException。 在某些情況下,發送到其他仿真器的對象確實會到達,但發送給它自己的對象在發送第一個對象後永遠不會到達它自己。 我檢查了我的對象與其他人的發送和接收代碼,他們告訴他們沒有問題,但我一直得到異常。 這篇文章是作爲最後的手段。請幫忙!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(); 
} 

決定()方法產生一個新的線程。因此,當上述方法被調用時不會發生延遲。

這是在同一個程序,但完全不同的線程

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。 我已經嘗試過,關閉,沖洗和建議gogle。但我仍然得到這個錯誤。 以下是錯誤的片段對數 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

+0

跟蹤錯誤'而不是將你的整個LogCat粘貼到這裏 – jmishra 2012-03-18 00:06:33

+0

錯誤是否發生在讀寫器? – dldnh 2012-03-18 00:08:50

+0

錯誤發生在書面。並且正在接收對象的模擬器有此EOFException -03-17 19:18:40.184:I/init(553):進入listen while循環 03-17 19:18:40.744:W/System.err(553 ):java.io.EOFException 03-17 19:18:40.774:W/System.err(553):\t at java.io.DataInputStream.readByte(DataInputStream.java:98) 03-17 19:18: 40.774:W/System.err(553):\t在java.io.ObjectInputStream.nextTC(ObjectInputStream.java:506) – Ashwin 2012-03-18 00:14:12

回答

0

解決了problem- 我宣佈的ObjectInputStream和ObjectOutputStream的私人,並使其全球。這不知何故破壞了流。 通過使它們都是本地的,錯誤被消除了。