2015-03-28 3 views
0

вот мой поток для TCP сервераjava.net.SocketException сокет закрыт ип expectively в андроида

class Tcpserver implements Runnable{ 

     @Override 
     public void run() { 
      try 
      { 
       m_server=new ServerSocket(2001); 
       Log.v("tcp", "srvrsckt crtd"); 
       final Socket connectedsocket=m_server.accept(); 
       Log.v("tcp", "client cnctd"); 
       Message clientmessage=Message.obtain(); 
       Log.v("tcp", "clnt msg obtain"); 
       ObjectInputStream ois= new ObjectInputStream(connectedsocket.getInputStream()); 
       String strMessage=(String) ois.readObject(); 
       clientmessage.obj=strMessage; 
       Log.v("tcp", "b4 call handlr"); 
       mHandler.sendMessage(clientmessage); 

       Log.v("tcp", "o/p stm obtain"); 
       Button b=(Button)findViewById(R.id.button2); 
       b.setOnClickListener(new View.OnClickListener() { 

        public void onClick(View v) { 
         try { Socket connectedsocketdup=connectedsocket; 
          Log.v("tcp","socketcrtdonclick"); 
          ObjectOutputStream oos=new ObjectOutputStream(connectedsocketdup.getOutputStream()); 
          Log.v("tcp","tcpsrvronclick"); 
          oos.writeObject("Hai....mmx"); 
          //oos.writeChars("hi...mmx"); 
          Log.v("tcp","write"); 
         } catch (IOException e1) { 
          Log.v("tcp","error"+e); 
          e1.printStackTrace(); 
         } 
        } 
       }); 
       Log.v("tcp", "write"); 
       ois.close(); 
       //oos.close(); 
       m_server.close(); 
      } 

      catch(Exception e) 
      { 
       Message msg3=Message.obtain(); 
       msg3.obj=e.getMessage(); 
       mHandler.sendMessage(msg3); 
      } 
     } 
    } 

, когда я назвал по щелчку Fn, нажав на кнопку то ошибку

Java .net.SocketException сокет закрыт

получают

журнал кошки приведен ниже *

03-29 04: 50: 11,530 3482-3482/com.example.pranavtv.loudspeaker В/TCP: socketcrtdonclick 03-29 04: 50: 11,530
3482-3482/com.example.pranavtv.loudspeaker V/tcp: [email protected] 03-29 04: 50: 11.530
3482-3482/com.example.pranavtv.loudspeaker W/System.err: java.net.SocketException: Розетка закрыта 03-29 04: 50: 11.530
3482-3482/com.example.pranavtv.loudspeaker W/System.err: atorg.apache.harmony.luni.net.PlainSocketImpl .checkNotClosed (PlainSocketImpl.java:140) 03-29 04: 50: 11.530 3482-3482/com.example.pranavtv.loudspeaker W/System.err: at org.apache.harmony.luni.net.PlainSocketImpl. getOutputStream (PlainSocketImpl.java:240) 03-29 04: 50: 11.530 3482-3482/com.example.pranavtv.loudspeaker W/System.err: at java.net.Socket.getOutputStream (Socket.java:453) 03-29 04: 50: 11.530 3482-3482/com.example.pranavtv.loudspeaker W/System.err: at com.example.pranavtv.loudspeaker.Wall $ Tcpserver $ 1.onClick (Wall.java:237) 03-29 04: 50: 11.530 3482-3482/com.example.pranavtv.loudspeaker W/System.err: at android.view.View.performClick (View.java:2485) 03-29 04:50: 11,530 3482-348 2/com.example.pranavtv.loudspeaker W/System.err: at android.view.View $ PerformClick.run (View.java:9080) 03-29 04: 50: 11.530 3482-3482/com.example. pranavtv.loudspeaker W/System.err: at android.os.Handler.handleCallback (Handler.java:587) 03-29 04: 50: 11.530 3482-3482/com.example.pranavtv.loudspeaker W/System. err: at android.os.Handler.dispatchMessage (Handler.java:92) 03-29 04: 50: 11.530 3482-3482/com.example.pranavtv.loudspeaker W/System.err: at android.os.Looper .loop (Looper.java:130) 03-29 04: 50: 11.530 3482-3482/com.example.pranavtv.loudspeaker W/System.err: at android.app.ActivityThread.main (ActivityThread.java: 3714) 03-29 04: 50: 11,53 0 3482-3482/com.example.pranavtv.loudspeaker W/System.err: at java.lang.reflect.Method.invokeNative (собственный метод) 03-29 04: 50: 11.530 3482-3482/com.example. pranavtv.loudspeaker W/System.err: at java.lang.reflect.Method.invoke (Method.java:507) 03-29 04: 50: 11.530 3482-3482/com.example.pranavtv.loudspeaker W/System.err: at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:853) 03-29 04: 50: 11.530 3482-3482/com.example.pranavtv.loudspeaker W/System .err: at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:611) 03-29 04: 50: 11.530 3482-3482/com.example.pranavtv.loudspeaker W/System.err: по адресу de.robv.android.xposed.XposedBridge.main (XposedBridge.java:132) 03-29 04: 50: 11.530 3482-3482/com.example.pranavtv.loudspeaker W/System.err: at dalvik.system.NativeStart.main (собственный метод)

*

+1

Это сломано на многих уровнях - в дополнение к попытке асинхронного использования сокета в событии ui, которое, вероятно, произойдет долго после того, как этот сокет был закрыт созданием потока, даже если он все еще открыт вы бы попытались выполнить сетевую операцию в потоке пользовательского интерфейса, которая в большинстве конфигураций сама по себе приведет к исключению. Вам нужно переосмыслить всю структуру вещей, вплоть до взаимодействия сервер-клиент. –

ответ

-1

Это исключение и сообщение означает, что вы закрыл сокет, а затем продолжали использовать его.

Возможно, вы не знаете, что закрытие либо входного, либо выходного потока сокета закрывает другой поток и сокет. Вы закрываете ObjectInputStream внизу этого кода, но у вас все еще есть работающий обработчик, который требует, чтобы сокет был открыт.

Вопреки тому, что вы можете прочитать в другом месте, это не означает, что сверстник закрыл соединение.

NB не создайте новый ObjectOutputStream за сообщение. Вы должны использовать те же потоки ввода и вывода объектов для жизни сокета с обоих концов. В противном случае вы получите StreamCorruptedException.

+0

Blimey. Некоторые люди будут ниспровергать что угодно. – EJP

Смежные вопросы