关于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();
}
} 展开
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();
}
} 展开
4个回答
展开全部
数组下标越界
do while循环的常见问题,do while循环是这样的,先执行do循环内函数,再做while判断。数组下标越界是当buf内的数据满了之后又执行了一次do内的函数体,所以会越界,修改do-while中的判断,或者改成for循环,或者while循环
而且,楼主,这个buf.length != -1你是想表明一个什么意思,标示不太理解,也就是说这段代码出现问题的部分是在do-while循环的判断上,建议修改do-while循环,修改buf.length != -1
do while循环的常见问题,do while循环是这样的,先执行do循环内函数,再做while判断。数组下标越界是当buf内的数据满了之后又执行了一次do内的函数体,所以会越界,修改do-while中的判断,或者改成for循环,或者while循环
而且,楼主,这个buf.length != -1你是想表明一个什么意思,标示不太理解,也就是说这段代码出现问题的部分是在do-while循环的判断上,建议修改do-while循环,修改buf.length != -1
展开全部
错误中表明就是文件太大了,换个小点的试一下就可以了。
不过,你这个程序有许多bug,即使传送完成了。接收不会停止,导致文件一会就变很大了。
不过,你这个程序有许多bug,即使传送完成了。接收不会停止,导致文件一会就变很大了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询