作者wheredo (啤酒一罐罐 健康又美麗)
看板java
標題[問題] Client接收String的問題
時間Sun Sep 11 21:53:03 2011
我寫一個測試的java程式
server部分code
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
String []hh = new String[100];
hh[0]="String1"; hh[1]="String2";
hh[2]="String3"; hh[3]="String4";
hh[4]="String5"; hh[5]="String6";
for(int i=0;i<=5;i++){
String outData = hh[i];
byte [] outByte = outData.getBytes();
out.write(outByte , 0 , outByte.length);
out.flush();
System.out.println(outData);
}
client部分code
DataInputStream in = new DataInputStream(socket.getInputStream());
for(int i=0;i<=5;i++){
byte[] inByte = new byte[1000];
in.read(inByte);
String servermsg = new String(inByte , 0 , inByte.length);
System.out.println("Message from server : "+i);
System.out.println(servermsg);
}
結果我很納悶因為他的執行結果跟我想的不太一樣
執行結果:
Message from server : 0
String1
Message from server : 1
String2String3String4String5String6
但是我預想的結果是
Message from server : 0
String1
Message from server : 1
String2
Message from server : 2
String3
Message from server : 3
String4
Message from server : 4
String5
Message from server : 5
String6
請問這是怎樣的問題呢?
要如何修改才能得到我預想的結果呢?
先謝謝各位
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.171.37.243
※ 編輯: wheredo 來自: 118.171.37.243 (09/11 21:55)
推 po500922:因為無法控制底層tcp分成幾個封包傳送,通常作法是會在字 09/11 22:28
→ po500922:串後加上\r\n當作一個字串的結束,在client端自行拆解 09/11 22:30
這樣client不就無法確認幾次可以收到?
這樣就無法用for loop去接收 那要如何接收呢?
→ darkk6:如果要傳這個 String[] 用 ObjectOutputStream 比較直接 09/11 23:08
→ darkk6:如果要傳字串, 推薦 PrintStream 和 Scanner 09/11 23:12
※ 編輯: wheredo 來自: 114.39.5.215 (09/11 23:53)
推 LaPass:推ObjectOutputStream,省了一堆麻煩..... 09/11 23:58