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)这个异常。搞不懂。。。。。求解! 展开
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)这个异常。搞不懂。。。。。求解! 展开
4个回答
展开全部
你用的是字节流读取写入,流中的数据是0,1序列。
由于客户端读入的是多个文件,不停的往服务器写数据。而没有什么标记是来说明读取一个
文件结束下一个文件开始的。服务器只能判断流中是否还有数据,如果有继续读,如果没有
返回-1.
所以,如果没有这种特别的需求,那就把那些文件打包,作为一个文件传输吧。
由于客户端读入的是多个文件,不停的往服务器写数据。而没有什么标记是来说明读取一个
文件结束下一个文件开始的。服务器只能判断流中是否还有数据,如果有继续读,如果没有
返回-1.
所以,如果没有这种特别的需求,那就把那些文件打包,作为一个文件传输吧。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
循环发送,肯定是读到全部内容的底啊,它是不会自动加结束符的,应该在发送完一个文件后发送一个结束标志过去,这样既可以处理啦。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
既然是循环发送,应该可以控制啊,确保一个发送完再发送另一个,应该不难
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询