日期:2014-05-20  浏览次数:20747 次

java socket编程疑问
public void receiveXML(){
String xmlString="";
String s="";
int port=DEFAULT_PORT;
byte[] buffer=new byte[MAX_PACKER_SIZE];
try {
server=new DatagramSocket(port);
packet=new DatagramPacket(buffer, buffer.length);
while(true){
try {
server.receive(packet);
s=new String(packet.getData(),0,packet.getLength());
System.out.println(s);
xmlString+=s;
packet.setLength(buffer.length);
} catch (IOException ioe) {
// TODO: handle exception
ioe.printStackTrace(); 
}
}
} catch (SocketException se) {
// TODO: handle exception
se.printStackTrace();  
}
server.close(); //这之后貌似就执行不了了
System.out.println(xmlString);
}
写了一个方法,但是在最后一句System.out.println(xmlString);打印不出结果,貌似后面都执行不了,请问这是为什么?

------解决方案--------------------
while(true)

你靠异常来跳出循环么?否则不就永远在这循环里面了?
------解决方案--------------------
你都while(true)了,这是个死循环,你得想办法在合适的时候跳出循环(跳出接收状态)。
------解决方案--------------------
哦,Mice也在关注。

我再说一句,TCP的发送方发送完毕后,接收方能知道发送结束了,因为流会到结束点,或连接会被关掉,
和TCP不同,UDP的接收方会一直在接收,而并不知道发送已经结束...
------解决方案--------------------
这个是跳不出=-= 要接受所有数据 用StringBuffer什么的把你拿到的数据整合起来就行