2015-11-20 242 views
0

我在Android上作爲服務器部件玩弄ServerSocket。我不明白它是如何表現的。這裏是我測試的:Android ServerSocket不向客戶端發送數據(客戶端c#,服務器java)

A1。在Android上實例化ServerSocket

A2。 ServerSocket向客戶端發送「hello」

A3。客戶端可以讀取「你好」,並可以回答ServerSocket

A4。 Android上的ServerSocket從客戶端接收答案

=>完美的作品

現在我想客戶端成爲第一個將消息發送到ServerSocket的:

B1。在Android上實例化ServerSocket

B2。客戶端將數據發送到服務器端(ServerSocket)

B3。 ServerSocket接收來自客戶端的數據

B4。不可能回覆客戶

可能是一種可能的正常行爲?

感謝

這裏是源代碼

public void startServer() 
{ 
    log("startServer"); 
    UUID uuid = UUID.randomUUID(); 
    final String sessionId = uuid.toString().replace("-", ""); 
    log("Session ID = " + sessionId); 

    Thread t = new Thread(new Runnable() { 
     @Override 
     public void run() { 
      while (stopServer == false) { 
       ServerSocket serverSocket = null; 
       try { 
        serverSocket = new ServerSocket(7777); 
        final Socket socket = serverSocket.accept(); 

        InputStream inputStream = socket.getInputStream(); 
        String strFromClient = ""; 
        int i = 0; 
        while (i != -1) { 
         try { 
          i = inputStream.read(); 
          if (i != -1) 
           strFromClient += (char) i; 
         }catch (Exception e){ 
          break; 
         } 
        } 
        inputStream.close(); 

        OutputStream outputStream = socket.getOutputStream(); 
        String strToClient = "test"; 
        byte[] cArray = strToClient.getBytes(); 
        outputStream.write(cArray); 
        outputStream.flush(); 
        outputStream.close(); 

        socket.close(); 
        serverSocket.close(); 

        log("end server"); 
       } catch (Exception e) { 
        //log(e.toString()); 
       } 
      } 
     } 
    }); 
    t.start(); 
} 
+0

.............. No。 – greenapps

+0

客戶端是C#中的NetworkStream,也許可能是問題(在調試模式下,ServerSockets發送的數據很好)? – dvxwifiscan

+0

............ No。 – greenapps

回答

0

好,我找到了解決辦法!這個錯誤是因爲C#客戶端沒有發送「-1」值(這只是在關閉流或類似的東西之後觸發的)。

的解決方案是在Android端,並從客戶端的數據讀取現在做如下:

   InputStream inputStream = socket.getInputStream(); 
       String strFromClient = ""; 
       int available = inputStream.available(); 
       Log.d("intelsms", "available from client:" + available); 
       for (int i=0;i<available;i++){ 
        int c = inputStream.read(); 
        strFromClient+=(char)c; 
       } 

我用的是「可用的()」方法,以瞭解有多少字節可供客戶閱讀。

OUF!

相關問題