java UDP server端接收消息会有上次的消息

大_爱 2014-02-25 04:10:52

DatagramSocket serverSocket = new DatagramSocket(8888);
byte[] receiveData = new byte[1024];

DatagramPacket receivePacket = new DatagramPacket(receiveData,receiveData.length);
//接收文件信息,包括文件名,文件长度。
serverSocket.receive(receivePacket);
String fileName = new String(receivePacket.getData()).trim();

System.out.println("FileInfor: " + fileName);
fileName = fileName.split("\\.")[0] + "New." + fileName.split("\\.")[1];
System.out.println("NewFileName" + fileName);
FileWriter fileWriter = new FileWriter(fileName);
while(true){

receivePacket.setData(receiveData);
serverSocket.receive(receivePacket);
String filecon = new String(receivePacket.getData());
System.out.println("文件内容:" + filecon);
if(filecon.trim().equals("end")){
fileWriter.close();
break;
}
fileWriter.write(filecon);
fileWriter.flush();

}
serverSocket.close();
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

}



上面是我写的 UDP 服务端,当第二次接收消息的时候,由于第一次数组并没有清空,所以,后面接收的数据就有问题。有谁知道这个怎么解决么?






...全文
150 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
大_爱 2014-02-25
  • 打赏
  • 举报
回复
引用 6 楼 zyb134506 的回复:
receivePacket有getLength方法可以获取收到或发出的信息的长度. 在处理getData前先把收到的长度取出来,然后根据长度去读取数组中的数据就可以了. 具体可以查看DatagramPacket的API
多谢这个方法是对的。
大_爱 2014-02-25
  • 打赏
  • 举报
回复
引用 6 楼 zyb134506 的回复:
receivePacket有getLength方法可以获取收到或发出的信息的长度. 在处理getData前先把收到的长度取出来,然后根据长度去读取数组中的数据就可以了. 具体可以查看DatagramPacket的API
好的,我去看看。
快乐的2 2014-02-25
  • 打赏
  • 举报
回复
receivePacket有getLength方法可以获取收到或发出的信息的长度. 在处理getData前先把收到的长度取出来,然后根据长度去读取数组中的数据就可以了. 具体可以查看DatagramPacket的API
大_爱 2014-02-25
  • 打赏
  • 举报
回复
引用 4 楼 lwb314 的回复:
[quote=引用 3 楼 beefcattlexiaoyang 的回复:] [quote=引用 2 楼 lwb314 的回复:] while(true)里每次重新 receiveData = new byte[1024];初始化一下存放数据的数组不就可以了
嗯,这样是可以,对性能会不会有影响啊[/quote]初始化个数组能有多大影响,再说你上个数组没引用了,JVM自己不就去释放了吗。[/quote] 嗯,我再看看。
  • 打赏
  • 举报
回复
引用 3 楼 beefcattlexiaoyang 的回复:
[quote=引用 2 楼 lwb314 的回复:] while(true)里每次重新 receiveData = new byte[1024];初始化一下存放数据的数组不就可以了
嗯,这样是可以,对性能会不会有影响啊[/quote]初始化个数组能有多大影响,再说你上个数组没引用了,JVM自己不就去释放了吗。
大_爱 2014-02-25
  • 打赏
  • 举报
回复
引用 2 楼 lwb314 的回复:
while(true)里每次重新 receiveData = new byte[1024];初始化一下存放数据的数组不就可以了
嗯,这样是可以,对性能会不会有影响啊
  • 打赏
  • 举报
回复
while(true)里每次重新 receiveData = new byte[1024];初始化一下存放数据的数组不就可以了
大_爱 2014-02-25
  • 打赏
  • 举报
回复

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧