2015-09-23 2 views
0

Я разрабатываю приложение android wifi -chat.ServerSocket, закрывающий себя в AsyncTask [Android Wifi P2P Manager]

Немного информации о моем приложении: -> Устройство вызовов StartServer() выступать в качестве сервера, другие вызовов устройства запуска клиента(), чтобы действовать в качестве клиента

Что работает: -> A Client может успешно отправить данные в первый раз клиенту, но не снова и снова

-> Мне нужно снова вызвать starterver() на первом устройстве, чтобы клиент мог снова отправить данные.

StartServer() вызывает эту задачу Async, следующее его DoinBackgroundMethod

protected String doInBackground(Void... params) { 
    ServerSocket serverSocket = null; 
    try { 

     while(true) { 
      serverSocket = new ServerSocket(PORT); 
      Socket client = serverSocket.accept(); 
      StartMSG(client); 
     } 

    } catch (IOException e) { 
     return null; 
    } finally { 

     try { 

      chatclient.changeserverrunning(false); 
      if (serverSocket == null) { 

      } else { 
       serverSocket.close(); 
      } 
      return null; 
     } catch (Exception e) { 

     } 
    } 
//return null; 
} 

protected void StartMSG(Socket client){ 

    try { 
     InputStream inputstream = client.getInputStream(); 
     ObjectInputStream ois = new ObjectInputStream(inputstream); 
     Message m = null; 
     try { 
      m = (Message) ois.readObject(); 
     } catch (ClassNotFoundException e) { 
      e.printStackTrace(); 
     } 
     if (m != null) { 
      if (m.gettype() == 1) { 
       final String my_msg = m.getMessage();//Toast msg afterwards 

     } 

    }catch (Exception e){ 

    } 
} 

стороны клиента Код: Он запускается, когда хиты клиента отправить кнопку и вызовы начинают метод клиента .в который Он устанавливает значения Ip до и расслоения их и вызывает сообщение отправки участия в качестве Намерения службы под названием FileTransferService

его код (отведенный):

protected void onHandleIntent(Intent intent) { 

    Context context = getApplicationContext(); 
    if(socket==null){ 
     socket = new Socket(); 
    } 



    if (intent.getAction().equals(ACTION_SEND_FILE)) { 
     final String msg_type=intent.getExtras().getString(MESSAGE_TYPE); 
     String host = intent.getExtras().getString(EXTRAS_ADDRESS); 

     int port = intent.getExtras().getInt(EXTRAS_PORT); 

      try { 
        socket.bind(null); 
        socket.connect((new InetSocketAddress(host, port)), SOCKET_TIMEOUT); 



       Message m = (Message) intent.getExtras().getSerializable(MESSAGE_INTENT_STR); 
       final String my_message=m.getMessage(); 

       ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
       ObjectOutputStream oos = new ObjectOutputStream(baos); 


       oos.writeObject(m); 

       oos.flush(); 
       oos.close(); 

       InputStream is = new ByteArrayInputStream(baos.toByteArray()); 
       OutputStream stream = socket.getOutputStream(); 
       ChatClient.copyFile(is, stream); 

      } catch (IOException e) { 

    } finally { 
       if (socket != null) { 
        if (socket.isConnected()) { 
         try { 
          //socket.close(); 

         } catch (Exception e) { 
          // Give up 
          e.printStackTrace(); 
         } 
        } 
       } 
      } 


    } 

} 
+0

Какое 'IOException' было поймано? – EJP

+0

Я не могу Toast Exception, поскольку я запускаю задачу сервера в Async Task, я могу поджарить с помощью handler.post, но это будет тост только статическим текстом, мне нужно передать объект Exception к нему, чтобы поджарить его, что я нахожу путают, как это сделать – abhirulz

ответ

-1

Вы должны попробовать https://github.com/tavendo/AutobahnAndroid и запустить клиента из службы, из asyntask он всегда будет заканчиваться.

+0

Это сервер. – EJP

+0

Можете ли вы уточнить? – abhirulz

+0

@abhirulz да посмотрите ссылку в ответе mConnection должно быть начато с сервиса, а не Asyntask, и служба должна быть запущена из активности. это способ, которым вы можете использовать эту библиотеку для websocket –

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