2012-03-19 35 views
0

我有一個簡單的java對等聊天程序,它工作正常。我想在這個程序中添加一個功能。我想讓用戶也可以通過網絡發送文件。檢查在網絡上使用java發送/接收的數據類型

目前通過簡單的聊天,我不必擔心用戶發送或接收/發送的類型或數據。但是通過文件傳輸功能,我必須知道發送了什麼類型的數據(無論是文件還是純文本),以便如果它的純文本可以直接顯示給用戶,但是使用該文件我必須打開一個JFilechooser或某種對話框來接收或發送文件。 以下是在接收端

try { 
     incoming = new BufferedReader(new InputStreamReader(css.getInputStream())); 

     String receive = new String(); 
     String history = ""; 
     String name = incoming.readLine(); 
     chatWindow.RemoteField.setText(name); 

     do { 
      receive = incoming.readLine(); 
      history = history + "\n" + receive; 
      if (receive != null) { 
       chatWindow.recm.setText(history); 
      } else { 
       receive = "BYE"; 
      } 

      //System.out.println("Received Message: "+receive); 

     } while (receive.equals("BYE") != true); 
    } catch (Exception npe) { 
     System.out.println("Error2" + npe); 
    } 

所以如何添加檢查是它顯示給用戶之前接收到的數據的類型的代碼。

回答

2

您需要發送一些值來指示下一項數據將會是什麼。例如,您可以在每個文本行前面加上一個值TEXT\n,並且對於每個文件FILE:nnn\n,其中\n是換行符,nnn是文件大小(以字節爲單位),因此您可以知道要在等待另一個TEXT之前讀取多少流FILE標記。

UPDATE

例如,您輸入的數據流可能看起來像:

TEXT 
Hey mate, here's some cool file 
FILE:10 
1234 
56789TEXT 
Did you get it ok? 

我假設一個聊天消息將永遠只能是一行文本。另外,文件不需要以行返回結束,因爲在上面的示例中字節數已經是已知的,10(包括4和5之間的新行字符)。該文件中這裏的內容是:

1234 
56789 
+0

所以你的意思是說我應該文本和文件之前添加兩個獨特的填充和識別基礎上的填充數據的類型。對? – 2012-03-19 05:55:20

+0

是的,我認爲這是告訴客戶需要什麼類型的數據的最明確的方式。 – SimonC 2012-03-19 06:18:36

+0

謝謝,我會嘗試更新的答案。 – 2012-03-19 06:36:31

相關問題