[問題] Client接收String的問題

看板java作者 (啤酒一罐罐 健康又美麗)時間12年前 (2011/09/11 21:53), 編輯推噓2(203)
留言5則, 3人參與, 最新討論串1/2 (看更多)
我寫一個測試的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)

09/11 22:28, , 1F
因為無法控制底層tcp分成幾個封包傳送,通常作法是會在字
09/11 22:28, 1F

09/11 22:30, , 2F
串後加上\r\n當作一個字串的結束,在client端自行拆解
09/11 22:30, 2F
這樣client不就無法確認幾次可以收到? 這樣就無法用for loop去接收 那要如何接收呢?

09/11 23:08, , 3F
如果要傳這個 String[] 用 ObjectOutputStream 比較直接
09/11 23:08, 3F

09/11 23:12, , 4F
如果要傳字串, 推薦 PrintStream 和 Scanner
09/11 23:12, 4F
※ 編輯: wheredo 來自: 114.39.5.215 (09/11 23:53)

09/11 23:58, , 5F
推ObjectOutputStream,省了一堆麻煩.....
09/11 23:58, 5F
文章代碼(AID): #1ERBr47j (java)
文章代碼(AID): #1ERBr47j (java)