关于java UDP socket传较大文件的问题,我写了个小程序 但就是报错 不知道错哪里了 求大神指出来代码如下

importjava.io.BufferedOutputStream;importjava.io.DataOutputStream;importjava.io.File;... import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class Receiver{
public static void main(String[] args)throws Exception {
Integer port=2345;
byte[] buffer = new byte[1024];
DatagramSocket datagramSocket=new DatagramSocket(port);
DatagramPacket dp2=new DatagramPacket(buffer,buffer.length);
System.out.println("begin receive data....");
String savePath = "F:\\11.jpg";
DataOutputStream out = new DataOutputStream(new BufferedOutputStream
(new BufferedOutputStream(new FileOutputStream(savePath))));
datagramSocket.receive(dp2);
while(true) {
boolean j=false;
while (dp2.getData().length != 0) {
out.write(dp2.getData());
datagramSocket.receive(dp2);
j=true;
}
if (j)
System.out.println("文件传送完毕.");
out.close();
}
}
}

import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class Sender{
public static void main(String[] args)throws Exception{
DatagramSocket sendSocket=new DatagramSocket();
String filePath = "E:\\12345.jpg";
File fi = new File(filePath);
System.out.println("文件长度:" + (int) fi.length());
DataInputStream fis = new DataInputStream(new BufferedInputStream(new FileInputStream(filePath)));
int bufferSize =1024;
byte[] buf = new byte[bufferSize];
int pos =0;
int i;
do
{
i=fis.read();
int j=0;
while(j<1024 & i != -1) {
buf[pos] = (byte) i;
pos++;
i=fis.read();
j++;
}
//System.out.println(pos);
sendSocket.send(new DatagramPacket(buf,pos,InetAddress.getByName("127.0.0.1"), new Integer(2345)));
}
while (buf.length != -1);
fis.close();
}
}
展开
 我来答
Limunite
2012-11-22 · 超过19用户采纳过TA的回答
知道答主
回答量:30
采纳率:0%
帮助的人:47.6万
展开全部
数组下标越界
do while循环的常见问题,do while循环是这样的,先执行do循环内函数,再做while判断。数组下标越界是当buf内的数据满了之后又执行了一次do内的函数体,所以会越界,修改do-while中的判断,或者改成for循环,或者while循环
而且,楼主,这个buf.length != -1你是想表明一个什么意思,标示不太理解,也就是说这段代码出现问题的部分是在do-while循环的判断上,建议修改do-while循环,修改buf.length != -1
friendbookok
2012-11-22
知道答主
回答量:3
采纳率:0%
帮助的人:4605
展开全部
错误中表明就是文件太大了,换个小点的试一下就可以了。
不过,你这个程序有许多bug,即使传送完成了。接收不会停止,导致文件一会就变很大了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小姨讲故事
2012-11-22
知道答主
回答量:5
采纳率:0%
帮助的人:7690
展开全部
enene
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
松之song
2012-11-21 · TA获得超过446个赞
知道小有建树答主
回答量:489
采纳率:50%
帮助的人:356万
展开全部
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式