java新手,socket编程,请问如何一次发送多个文件,网上看了一些代码,但各种异常,高手分析一下:

发送代码:Socketsocket=newSocket("127.0.0.1",9090);DataOutputStreamoutput=newDataOutputStr... 发送代码:
Socket socket=new Socket("127.0.0.1",9090);
DataOutputStream output=new DataOutputStream(socket.getOutputStream());
output.writeUTF("test.txt"); //每个文件发送前先发送文件名
File file=new File("D:\\test.txt");
FileInputStream in=new FileInputStream(file);
byte[] b = new byte[1024];
int n = in.read(b);
while (n != -1) // 没到最后
{
if (n == 1024)
output.write(b);
else
output.write(b, 0, n);
n = in.read(b);
}
接收代码:
ServerSocket serverSocket=new ServerSocket(9090);
System.out.println("wait for connect");
Socket socket=serverSocket.accept();
DataInputStream inputStream=new DataInputStream(socket.getInputStream());
String str=inputStream.readUTF();
System.out.println(str);
File file=new File("F:\\"+str);//保存
file.createNewFile();
FileOutputStream outputStream=new FileOutputStream(file);

byte[] b = new byte[1024];
int n = inputStream.read(b);
while (n != -1)
{
if (n == 1024)
outputStream.write(b);
else
{
outputStream.write(b, 0, n);
break;
}
n = inputStream.read(b);
}
假如我循环发送文件,再循环接收,那么在接收第一个文件时会在什么时候结束啊?n=-1只是表示网络流没内容,循环发送文件时会不会把全部文件接收到第一个去?
我的疑惑是怎么去判断第一个文件已经接受完毕,循环发送,用n=-1判断读到底,是读到第一个文件的底还是全部内容的底?是不是会在每个文件发送完自动加结束符啊?因为我看到readUTF()这个方法要处理catch (EOFException e)这个异常。搞不懂。。。。。求解!
展开
 我来答
百度网友58a56bb
2012-08-17
知道答主
回答量:18
采纳率:0%
帮助的人:13.2万
展开全部
读到-1是流末尾,代表流关闭,没有内容是阻塞等待,不会读到-1,流都没用了,还继续传什么啊
你要是想使用这个连接反复发送,需要制定个小协议,例如:开始把文件的字节长度长度发过去,后面把文件字节发过去。
你查看一下JDK DOC,为什么这段代码文件名用了UTF这个write,read,因为这个api就包装了一个后面数据的长度信息,这样才能把文件名跟文件内容分离开来。
专注社会生产力
2012-08-17 · TA获得超过161个赞
知道小有建树答主
回答量:130
采纳率:0%
帮助的人:97.9万
展开全部
你用的是字节流读取写入,流中的数据是0,1序列。
由于客户端读入的是多个文件,不停的往服务器写数据。而没有什么标记是来说明读取一个
文件结束下一个文件开始的。服务器只能判断流中是否还有数据,如果有继续读,如果没有
返回-1.
所以,如果没有这种特别的需求,那就把那些文件打包,作为一个文件传输吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
五月天2013
2012-08-26
知道答主
回答量:1
采纳率:0%
帮助的人:2.7万
展开全部
循环发送,肯定是读到全部内容的底啊,它是不会自动加结束符的,应该在发送完一个文件后发送一个结束标志过去,这样既可以处理啦。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
koyomagic
2012-08-20
知道答主
回答量:25
采纳率:0%
帮助的人:13.7万
展开全部
既然是循环发送,应该可以控制啊,确保一个发送完再发送另一个,应该不难
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式