2011-09-18 131 views
0

我使用單個端口在Messenger應用程序中接收文件和消息。我想問我如何區分文件和消息?我已經研究發現,我必須做出一個協議,我試過了,但我似乎無法做出一個。有什麼辦法可以做到這一點?java在端口接收連接

現在我收到這樣的連接:

public class ReceiveConnection extends Thread { 

     Socket clientSocket = null; 

     public ReceiveConnection(Socket socket) 
     { 
      this.clientSocket = socket; 

      SocketOperator.this.sockets.put(socket.getInetAddress(), socket); 
     } 

     @Override 
     public void run() { 
      try { 

BufferedReader in = new BufferedReader(newInputStreamReader(clientSocket.getInputStream())); 



         while ((inputLine = in.readLine()) != null) {     



          if (inputLine.contains("TEXT") == true) 
          { 

           Log.i("SocketOP","text"); 
           appManager.messageReceived(inputLine); 
         } 


         } 
         if (inputLine.contains("TEXT") == false) 
         { 
        InputStream is=clientSocket.getInputStream(); 

       while(is!= null){ 
          Log.i("SocketOP","filee"); 

appManager.fileReceived(is); 
        } 


         } 

我已經串連字符串「文本」與我的短信故未來通過。把一個ELSE語句不起作用。我如何添加一個通知程序與文件,以便我知道何時收到文件?

+0

請儘量格式化您的代碼。這種形式真的很難。 – Mat

回答

0

應創建一個消息報頭包含下面的數據:作爲一個消息分隔符

  1. 開始與唯一字節序列(2-4字節長)。這應該是一個不常見的非文本序列(例如,不是CRLF或其他控制序列)。

  2. 包含消息類型字節,以便您知道這是否是文本消息或文件。

  3. 包含消息的長度,這有助於提取消息。

+0

感謝您的回覆。我沒有理解你的第二點。即時通訊也不確定如何提取回來。我是一個初學者,我很抱歉:(能否詳細說明一下,或許是一個例子?非常感謝你。 – user951019

+0

或者如果你能給我一個鏈接解釋它有點:)謝謝。 – user951019

+0

在接收端,您需要知道數據的類型。你有文本和文件。你需要區分它們,因爲你對它們有不同的看法。 –