2011-09-18 78 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

在接收端,您需要知道数据的类型。你有文本和文件。你需要区分它们,因为你对它们有不同的看法。 –