作者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)
1F:推 po500922:因为无法控制底层tcp分成几个封包传送,通常作法是会在字 09/11 22:28
2F:→ po500922:串後加上\r\n当作一个字串的结束,在client端自行拆解 09/11 22:30
这样client不就无法确认几次可以收到?
这样就无法用for loop去接收 那要如何接收呢?
3F:→ darkk6:如果要传这个 String[] 用 ObjectOutputStream 比较直接 09/11 23:08
4F:→ darkk6:如果要传字串, 推荐 PrintStream 和 Scanner 09/11 23:12
※ 编辑: wheredo 来自: 114.39.5.215 (09/11 23:53)
5F:推 LaPass:推ObjectOutputStream,省了一堆麻烦..... 09/11 23:58