Android 使用套接字wifip2p发送文件列表
我试图使用套接字将多个文件从客户端发送到服务器,但当我单击“上载”按钮时,它每秒只添加一个文件Android 使用套接字wifip2p发送文件列表,android,sockets,wifip2p,Android,Sockets,Wifip2p,我试图使用套接字将多个文件从客户端发送到服务器,但当我单击“上载”按钮时,它每秒只添加一个文件 您的复制文件不适合网络传输。 您需要摆脱copyFile内部的两个关闭调用。在客户端,out.close在发送第一个文件后关闭套接字。在服务器端,InputStream.close在收到第一个文件后关闭套接字。调用方负责关闭传递给copyFile的流,而不是copyFile的责任 更重要的是,对于客户端要发送的每个文件,copyFile在发送文件的实际字节之前并不发送文件的字节计数,以指示每个文件
您的复制文件不适合网络传输。
您需要摆脱copyFile内部的两个关闭调用。在客户端,out.close在发送第一个文件后关闭套接字。在服务器端,InputStream.close在收到第一个文件后关闭套接字。调用方负责关闭传递给copyFile的流,而不是copyFile的责任
更重要的是,对于客户端要发送的每个文件,copyFile在发送文件的实际字节之前并不发送文件的字节计数,以指示每个文件的结束位置和下一个文件的开始位置。因此,在服务器端,copyFile不知道何时停止从inputStream读取数据,只会一直读取,直到连接关闭/断开
实际上,copyFile可以用于将文件从本地系统上的一个文件夹复制到另一个文件夹,但不适合通过TCP网络复制文件
请尝试以下方法:
客户端:
试一试{
socket.bindnull;
socket.connectnew InetSocketAddresshost,端口,套接字超时;
Log.dTAG,客户端套接字-+socket.isConnected;
BufferedOutputStream bos=新建BufferedOutputStreamsocket.getOutputStream;
DataOutputStream dos=新的DataOutputStreambos;
dos.writeIntfileUri.size;
forString文件:fileUri
{
//long length=file.length;
//dos.writelongle长度;
字符串名称=文件;
dos.writeUTFname;
文件f=新文件;
sendFilef,dos;
}
dos.close;
Log.dTAG,客户端:写入数据;
}
捕捉异常{
Log.eTAG,例如getMessage;
}
最后{
如果套接字!=null{
如果socket.isConnected{
试一试{
插座。关闭;
}
捕捉异常{
//放弃
e、 打印跟踪;
}
}
}
}
无效sendFileFile in,DataOutputStream out抛出IOException{
长文件长度=in.length;
out.writeLongfileLength;
FileInputStream fis=新的FileInputStreamin;
BufferedInputStream bis=新的BufferedInputStreamfis;
字节buf[]=新字节[1024];
内伦;
当文件长度>0时{
len=bis.readbuf;
如果len==-1,则抛出新IOException;
out.writebuf,0,len;
fileLength-=len;
}
}
服务器端:
试一试{
ServerSocket ServerSocket=newserversocket8988;
socketclient=serverSocket.accept;
BufferedInputStream bis=新建BufferedInputStreamclient.getInputStream;
DataInputStream dis=新的DataInputStreambis;
int filescont=dis.readInt;
File[]files=新文件[filescont];
forint i=0;i到底是什么语句抛出了错误?客户端还是服务器端?CopyFile.CopyFile到底是什么样子的?服务器端代码显示错误在android.Os.AsyncTask$3.doneAsyncTask.java:354FileServerAsyncTask类执行doInBackground时发生错误在第一个文件传输后引发错误。receivefile函数使文件大小变大:例如,当我发送20 mb视频时,receivefile函数的大小为100MB,请告诉我如何处理这些problems@AbhiShekKamboj我给您的代码没有扩展文件大小,因此您的问题必须是您将我的代码应用于项目的方式有误。请编辑您的问题,使其包含一个显示您实际正在做的一切的列表。先生:iflen==-1抛出新IOException of receivefile函数在传输第一个文件时抛出错误