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;i0时{ len=fileLength>=1024?1024:int fileLength; len=in.readbuf,0,len; 如果len==-1,则抛出新IOException; bos.writebuf,0,len; fileLength-=len; } }
到底是什么语句抛出了错误?客户端还是服务器端?CopyFile.CopyFile到底是什么样子的?服务器端代码显示错误在android.Os.AsyncTask$3.doneAsyncTask.java:354FileServerAsyncTask类执行doInBackground时发生错误在第一个文件传输后引发错误。receivefile函数使文件大小变大:例如,当我发送20 mb视频时,receivefile函数的大小为100MB,请告诉我如何处理这些problems@AbhiShekKamboj我给您的代码没有扩展文件大小,因此您的问题必须是您将我的代码应用于项目的方式有误。请编辑您的问题,使其包含一个显示您实际正在做的一切的列表。先生:iflen==-1抛出新IOException of receivefile函数在传输第一个文件时抛出错误