- 浏览: 447871 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
飞天奔月:
我来个简单点的代码 使用 LinkedHashSetpubli ...
ArrayList去重 -
飞天奔月:
public static <T> List< ...
ArrayList去重 -
aaron7524:
事务隔离级别 -
月陨殇:
wlh269 写道rswh110 写道lz内容写的不错,就是略 ...
事务隔离级别 -
lnx1824:
我的更奇怪,在本地静态的可以,放jetty里的页面后就不然,都 ...
JS得到上传图片尺寸
要求将服务端文件夹A下的文件拷贝到客户端文件A下 删除服务端文件夹A下的文件;
客户端文件夹B下的文件拷贝到服务端文件B下 然后删除客户端文件夹B下的文件;
技巧:实现过程中将要传输的文件打包后传输
服务端:
客户端:
配置文件:
参数加载器:
ZIP压缩和解压缩工具包:
客户端文件夹B下的文件拷贝到服务端文件B下 然后删除客户端文件夹B下的文件;
技巧:实现过程中将要传输的文件打包后传输
服务端:
package com.socket.filetrans.exe; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.List; import java.util.Properties; import com.socket.filetrans.LoadParamConfig; import com.socket.zip.util.ZipUtil; public class ServerTest { int port = 0; static String SERVER_SENDPATH = ""; String SERVER_SAVEPATH=""; ServerSocket ss = null; Socket s = null; DataInputStream dis=null; DataOutputStream dos=null; static List fileList=new ArrayList(); static ZipUtil zipUtilObj=new ZipUtil(); public ServerTest() throws IOException{ Properties properties=LoadParamConfig.getProperties(); SERVER_SENDPATH=properties.getProperty("SERVER_SENDPATH"); SERVER_SAVEPATH=properties.getProperty("SERVER_SAVEPATH"); port=Integer.parseInt(properties.getProperty("SOCKET_PORT")); ss=new ServerSocket(port); File file=new File(SERVER_SENDPATH); if(!file.exists()){ file.mkdir(); System.out.println("创建目录:"+SERVER_SENDPATH); } File file2=new File(SERVER_SAVEPATH); if(!file2.exists()){ file2.mkdir(); System.out.println("创建目录:"+SERVER_SAVEPATH); } } public static void main(String arg[]) { try { ServerTest server=new ServerTest(); while(true){ fileList=new ArrayList(); server.serverStart(); server.deleteDirectory(new File(SERVER_SENDPATH)); fileList=null; //短时间内new socket操作很多,而socket.close()操作并不能立即释放绑定的端口, //而是把端口设置为TIME_WAIT状态,过段时间(默认240s)才释放 Thread.sleep(240000); } } catch (Exception e) { e.printStackTrace(); } } public void serverStart() throws Exception { //===============================服务端批量写文件==========================================// File ZipFilePath=null; getAllFiles(SERVER_SENDPATH); while(true){ if(new File(SERVER_SENDPATH).renameTo(new File(SERVER_SENDPATH))){ if(fileList.size()>0){ //压缩文件 zipUtilObj.zip(SERVER_SENDPATH+".zip", SERVER_SENDPATH); //压缩文件绝对路径 ZipFilePath=new File(SERVER_SENDPATH+".zip"); //写文件名 s = ss.accept(); dos = new DataOutputStream(s.getOutputStream()); dos.writeUTF(ZipFilePath.getName()); System.out.println("服务端写文件名"); dos.close(); //读确认信息 s = ss.accept(); dis= new DataInputStream(new BufferedInputStream(s.getInputStream())); System.out.println(dis.readUTF()); //写数据 s = ss.accept(); DataInputStream fis = new DataInputStream(new BufferedInputStream(new FileInputStream(ZipFilePath))); int bufferSize = 8192; byte[] buf = new byte[bufferSize]; int read = 0; while ((read = fis.read(buf))!=-1) { dos = new DataOutputStream(s.getOutputStream()); dos.write(buf, 0, read); } dos.flush(); fis.close(); s.close(); System.out.println("服务端 写数据完成..."); //读信号 s = ss.accept(); dis= new DataInputStream(new BufferedInputStream(s.getInputStream())); System.out.println("服务端 读信号:"+dis.readUTF()+"\n"); } break; } } // 服务端文件结束标志 System.out.println("服务端没有数据发送或发送完成!"); s = ss.accept(); dos = new DataOutputStream(s.getOutputStream()); dos.writeUTF("serverFileSendOver"); dos.close(); //删除发送完的zip文件 boolean deleted2=false; if(ZipFilePath!=null){ while(!deleted2){ deleted2=ZipFilePath.delete(); } } //===============================服务端批量写文件 结束==========================================// //===============================服务端批接收 文件==============================================// String fileABSPath=""; File tempFile=null; while(true){ //读文件名 或者结束标志 s = ss.accept(); dis= new DataInputStream(new BufferedInputStream(s.getInputStream())); String fileName=""; if("clientFileSendOver".endsWith(fileName=dis.readUTF())){ System.out.println("服务端 收到客户端文件结束标志:"+fileName); break; } System.out.println("服务端 收到文件名:"+fileName); //写确认信息 s = ss.accept(); dos = new DataOutputStream(new BufferedOutputStream(s.getOutputStream())); dos.writeUTF("服务端 确认收到文件名:"+fileName); // dos.flush(); dos.close(); //读文件 fileABSPath=SERVER_SAVEPATH+File.separator+fileName; File tempdir=new File(fileABSPath.substring(0, fileABSPath.lastIndexOf("\\"))); tempFile=new File(fileABSPath); if(!tempdir.exists()){ tempdir.mkdirs(); } if(!tempFile.exists()){ tempFile.createNewFile(); } s = ss.accept(); DataOutputStream fos = new DataOutputStream(new BufferedOutputStream(new BufferedOutputStream(new FileOutputStream(tempFile)))); dis= new DataInputStream(new BufferedInputStream(s.getInputStream())); int bufferSize = 8192; byte[] buf = new byte[bufferSize]; int read = 0; while ((read = dis.read(buf))!=-1) { fos.write(buf, 0, read); } fos.close(); System.out.println("服务端 读取数据完成..."); //写信号 s = ss.accept(); dos = new DataOutputStream(new BufferedOutputStream(s.getOutputStream())); dos.writeUTF("ServerRecieved"); // dos.flush(); dos.close(); System.out.println("......服务端 接收数据结束...开始解压文件..."); } //解压数据 if(!"".equals(fileABSPath) && ".zip".equals(fileABSPath.substring(fileABSPath.lastIndexOf(".")))){ zipUtilObj.unzip(fileABSPath, SERVER_SAVEPATH); } //删除压缩文件 boolean deleted=false; if(tempFile!=null){ while(!deleted){ deleted=tempFile.delete(); } } } //===============================服务端批接收 文件 结束==============================================// /* * 递归删除一个目录以及下面的文件 */ public boolean deleteDirectory(File path) { if( path.exists() ) { File[] files = path.listFiles(); for(int i=0; i<files.length; i++) { if(files[i].isDirectory()) { deleteDirectory(files[i]); } else { //删除文件 files[i].delete(); } } } //删除目录 boolean hasdelete=false; if(!SERVER_SENDPATH.equals(path.getAbsolutePath())){ hasdelete=path.delete(); if(hasdelete){ System.out.println("删除目录:"+path); } } return hasdelete; } /** * 得到服务端要发送的文件列表 * @param dir * @return * @throws Exception */ public void getAllFiles(String dir) throws Exception{ File file=new File(dir); if(!file.exists()){ file.mkdir(); } File[] fs = file.listFiles(); if(fs!=null){ for(int i=0; i<fs.length; i++){ if(fs[i].isFile()){ fileList.add(fs[i].getAbsolutePath().substring(SERVER_SENDPATH.length())); } if(fs[i].isDirectory()){ try{ getAllFiles(fs[i].getPath()); }catch(Exception e){} } } } } }
客户端:
package com.socket.filetrans.exe; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.net.Socket; import java.util.ArrayList; import java.util.List; import java.util.Properties; import com.socket.filetrans.LoadParamConfig; import com.socket.zip.util.ZipUtil; public class ClientTest { private Socket socket = null; private String ip = "";// 设置成服务器IP private int port = 0; static List fileList=null;; static String CLIENT_SENDPATH =""; String CLIENT_SAVEPATH=""; DataInputStream dis=null; DataOutputStream dos=null; static ZipUtil zipUtilObj=new ZipUtil(); public ClientTest() { try { Properties properties=LoadParamConfig.getProperties(); CLIENT_SENDPATH=properties.getProperty("CLIENT_SENDPATH"); CLIENT_SAVEPATH=properties.getProperty("CLIENT_SAVEPATH"); port=Integer.parseInt(properties.getProperty("SOCKET_PORT")); ip=properties.getProperty("IP_ADDRESS"); File file=new File(CLIENT_SENDPATH); if(!file.exists()){ file.mkdir(); System.out.println("创建目录:"+CLIENT_SENDPATH); } File file2=new File(CLIENT_SAVEPATH); if(!file2.exists()){ file2.mkdir(); System.out.println("创建目录:"+CLIENT_SAVEPATH); } } catch (Exception ex) { ex.printStackTrace(); } } public static void main(String arg[]) { try { ClientTest client=new ClientTest(); while(true){ fileList=new ArrayList(); client.clientStart(); client.deleteDirectory(new File(CLIENT_SENDPATH)); fileList=null; //短时间内new socket操作很多,而socket.close()操作并不能立即释放绑定的端口, //而是把端口设置为TIME_WAIT状态,过段时间(默认240s)才释放 Thread.sleep(240000); } } catch (Exception e) { e.printStackTrace(); } } public void clientStart() throws Exception { String fileABSPath=""; File tempFile=null; //=======================客户端批量 读取文件==================================// while(true){ //读文件名 或者结束标志 socket = new Socket(ip, port); dis= new DataInputStream(new BufferedInputStream(socket.getInputStream())); String fileName=""; if("serverFileSendOver".endsWith(fileName=dis.readUTF())){ System.out.println("客户端 收到服务端文件结束标志:"+fileName); break; } System.out.println("收到文件名:"+fileName); //写确认信息 socket = new Socket(ip, port); dos = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream())); dos.writeUTF("客户端 确认收到文件名:"+fileName); // dos.flush(); dos.close(); //读 fileABSPath=CLIENT_SAVEPATH+File.separator+fileName; File tempdir=new File(fileABSPath.substring(0, fileABSPath.lastIndexOf("\\"))); tempFile=new File(fileABSPath); if(!tempdir.exists()){ tempdir.mkdirs(); } if(!tempFile.exists()){ tempFile.createNewFile(); } socket = new Socket(ip, port); DataOutputStream fos = new DataOutputStream(new BufferedOutputStream(new BufferedOutputStream(new FileOutputStream(tempFile)))); dis= new DataInputStream(new BufferedInputStream(socket.getInputStream())); int bufferSize = 8192; byte[] buf = new byte[bufferSize]; int read = 0; while ((read = dis.read(buf))!=-1) { fos.write(buf, 0, read); } fos.close(); System.out.println("客户端 读取数据完成..."); //写信号 socket = new Socket(ip, port); dos = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream())); dos.writeUTF("ClientRecieved"); System.out.println("客户端 发送 收到信号:ClientRecieved"+"\n"); // dos.flush(); dos.close(); System.out.println("......客户端 接收数据结束...开始解压文件..."); } //解压数据 if(!"".equals(fileABSPath) && ".zip".equals(fileABSPath.substring(fileABSPath.lastIndexOf(".")))){ zipUtilObj.unzip(fileABSPath, CLIENT_SAVEPATH); } //删除压缩文件 boolean deleted=false; if(tempFile!=null){ while(!deleted){ deleted=tempFile.delete(); } } //=======================客户端批量 读取文件 结束==================================// //=======================客户端批量 发送文件 ==================================// File ZipFilePath=null; getAllFiles(CLIENT_SENDPATH); while(true){ if(new File(CLIENT_SENDPATH).renameTo(new File(CLIENT_SENDPATH))){ if(fileList.size()>0){ //压缩文件 zipUtilObj.zip(CLIENT_SENDPATH+".zip", CLIENT_SENDPATH); //压缩文件绝对路径 ZipFilePath=new File(CLIENT_SENDPATH+".zip"); //写文件名 socket = new Socket(ip, port); dos = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream())); dos.writeUTF(ZipFilePath.getName()); System.out.println("客户端写文件名"); // dos.flush(); dos.close(); //读确认信息 socket = new Socket(ip, port); dis= new DataInputStream(new BufferedInputStream(socket.getInputStream())); System.out.println(dis.readUTF()); //写数据 socket = new Socket(ip, port); DataInputStream fis = new DataInputStream(new BufferedInputStream(new FileInputStream(ZipFilePath))); int bufferSize = 8192; byte[] buf = new byte[bufferSize]; int read = 0; while ((read = fis.read(buf))!=-1) { dos = new DataOutputStream(socket.getOutputStream()); dos.write(buf, 0, read); } dos.flush(); fis.close(); socket.close(); System.out.println("客户端 写数据完成..."); //读信号 socket = new Socket(ip, port); dis= new DataInputStream(new BufferedInputStream(socket.getInputStream())); System.out.println("客户端 读信号:"+dis.readUTF()+"/n"); } break; } } //客户端文件结束标志 System.out.println("客户端 没有数据发送或发送完成!"); socket = new Socket(ip, port); dos = new DataOutputStream(socket.getOutputStream()); dos.writeUTF("clientFileSendOver"); dos.close(); //删除发送完的zip文件 boolean deleted2=false; if(ZipFilePath!=null){ while(!deleted2){ deleted2=ZipFilePath.delete(); } } //=======================客户端批量 发送文件 结束 ==================================// } /* * 递归删除一个目录以及下面的文件 */ public boolean deleteDirectory(File path) { if( path.exists() ) { File[] files = path.listFiles(); for(int i=0; i<files.length; i++) { if(files[i].isDirectory()) { deleteDirectory(files[i]); } else { //删除文件 files[i].delete(); } } } //删除目录 boolean hasdelete=false; if(!CLIENT_SENDPATH.equals(path.getAbsolutePath())){ hasdelete=path.delete(); if(hasdelete){ System.out.println("删除目录:"+path); } } return hasdelete; } /** * 得到服务端要发送的文件列表 * @param dir * @return * @throws Exception */ public void getAllFiles(String dir) throws Exception{ File file=new File(dir); if(!file.exists()){ file.mkdir(); } File[] fs = file.listFiles(); if(fs!=null){ for(int i=0; i<fs.length; i++){ if(fs[i].isFile()){ fileList.add(fs[i].getAbsolutePath().substring(CLIENT_SENDPATH.length())); } if(fs[i].isDirectory()){ try{ getAllFiles(fs[i].getPath()); }catch(Exception e){} } } } } }
配置文件:
######### CLIENT_CONFIG ######### CLIENT_SENDPATH=D:\\SOCKET\\client_fa CLIENT_SAVEPATH=D:\\SOCKET\\client_shou SOCKET_PORT=8873 IP_ADDRESS=localhost ######### SERVER_CONFIG ######### SERVER_SENDPATH=D:\\SOCKET\\server_fa SERVER_SAVEPATH=D:\\SOCKET\\server_shou
参数加载器:
package com.socket.filetrans; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.util.Properties; public class LoadParamConfig { public static Properties getProperties(){ Properties properties=new Properties(); URL url= Thread.currentThread().getContextClassLoader().getResource("config.properties"); InputStream in = null; if(url != null){ try { in = url.openStream(); properties.load(in); //String path=properties.getProperty("importFilePath"); } catch (IOException e) { e.printStackTrace(); } } return properties; } }
ZIP压缩和解压缩工具包:
package com.socket.zip.util; import java.util.*; import java.util.zip.*; import java.io.*; public class ZipUtil { public void zip(String zipFileName,String inputFile)throws Exception{ zip(zipFileName,new File(inputFile)); } public void zip(String zipFileName,File inputFile)throws Exception{ ZipOutputStream out=new ZipOutputStream(new FileOutputStream(zipFileName)); zip(out,inputFile,""); System.out.println("zip done"); out.close(); } public void unzip(String zipFileName,String outputDirectory)throws Exception{ ZipInputStream in=new ZipInputStream(new FileInputStream(zipFileName)); ZipEntry z; while ((z=in.getNextEntry() )!= null) { System.out.println("unziping "+z.getName()); if (z.isDirectory()) { String name=z.getName(); name=name.substring(0,name.length()-1); File f=new File(outputDirectory+File.separator+name); f.mkdir(); System.out.println("mkdir "+outputDirectory+File.separator+name); } else{ File f=new File(outputDirectory+File.separator+z.getName()); f.createNewFile(); FileOutputStream out=new FileOutputStream(f); int b; while ((b=in.read()) != -1) out.write(b); out.close(); } } in.close(); } public void zip(ZipOutputStream out,File f,String base)throws Exception{ System.out.println("Zipping "+f.getName()); if (f.isDirectory()) { File[] fl=f.listFiles(); out.putNextEntry(new ZipEntry(base+"/")); base=base.length()==0?"":base+"/"; for (int i=0;i<fl.length ;i++ ) { zip(out,fl[i],base+fl[i].getName()); } } else { out.putNextEntry(new ZipEntry(base)); FileInputStream in=new FileInputStream(f); int b; while ((b=in.read()) != -1) out.write(b); in.close(); } } public static void main(String[] args) { try{ ZipUtil t=new ZipUtil(); t.zip("D:\\wulihai\\SocketTrans.zip","D:\\wulihai\\SocketTrans"); t.unzip("D:\\wulihai\\SocketTrans.zip","D:\\wulihai\\开发手册"); } catch(Exception e){e.printStackTrace(System.out);} } }
- SocketTrans.rar (18 KB)
- 下载次数: 103
发表评论
-
java开发实战视频详解
2017-07-02 08:09 491java开发实战视频详解 链接: http://pan.bai ... -
ArrayList去重
2013-04-25 10:18 3205public static List removeDuplic ... -
java ArrayList 自定义排序
2013-04-22 11:39 2122import java.util.ArrayList; imp ... -
按照指定编码读取配置文件
2012-12-13 10:17 848BufferedReader reader = new Buf ... -
java读取系统编码
2012-12-13 09:45 867public static void main(String[ ... -
Axis2和现有项目的集成
2011-08-11 10:08 1368axis2和现有项目集成 1.下载axis2-1.5-war. ... -
阻塞队列
2010-09-03 08:54 1184ArrayBlockingQueue为阻塞队列,加入和取出元素 ... -
axis2和JDK1.5开发(文件传输服务)详解二(图解)
2010-06-28 16:36 22555.生成webservice服务端代 ... -
产生随机字符串
2010-05-05 17:13 1031import java.util.Random; p ... -
常用IO操作
2009-09-22 13:22 1262例子:写文件,在文件末尾追加文字并且指定输出文件内容字符编码为 ... -
FileChannel锁定文件
2009-09-22 10:52 2383当FileLock fl = fc.tryLock();执行成 ... -
ZIP 压缩 和解压缩
2009-09-21 15:40 1087package com.socket.zip.util; ... -
Oracle number类型查询精度丢失问题
2009-08-21 16:00 6731一、需求中要求查到一个字段的值然后保持小数点后2位 ... -
Oracle number类型数据取出来后四舍五入到小数点后2位
2009-08-19 10:46 8068package com.wlh.test; impo ... -
将汉字编码为unicode
2009-07-28 10:26 852package test; import java. ... -
验证码
2009-07-05 17:29 1240验证servlet: package edu.yale. ... -
java.util.Date对象和String对象转换 SimpleDateFormat
2009-06-30 15:35 3034import java.text.ParseExcept ... -
Socket高级编程 多客户端
2009-06-26 14:03 2533客户端: package com.wlh.test; ... -
进制转换
2009-06-18 12:48 112816进制和字符串之间转换--- import java ... -
bat 命令学习
2009-06-01 23:59 10951.Echo 命令 打开回显或关闭请求回显功能,或显示消 ...
相关推荐
C#Socket文件传输,将文件名和文件保存到一个byte[]中传输,再通过解析获取文件名和文件保存到本地文件夹中
android Socket文件传输,对于几十M的文件都可以很好的传输
socket 文件传输编程 java 多线程
java socket 文件传输源码
c++编写的 MFC socket 文件传输 编译通过 可直接运行
比较好的利用socket实现文件传输功能。在Linux下测试可用。可以用来研究学习socket
Java基于Socket文件传输示例:服务器端和客户端
1服务端接收文件,客户端发送文件。 2 每个Socket连接同时只能够传输一个文件。 3 可同时发送网络消息 网络消息的消息格式为: @+nnnnn+消息内容,其中@为消息头,nnnnn为消息...-24 -24 接收方出错,文件传输被取消
本软件使用MFC采用面向对象的方法实现了基于Socket的文件传输。功能完整。
在linux下的c/c++实现的socket文件传输
基于WCF多线程的SOCKET文件传输服务
控制台socket文件传输程序,使用C++编写. 打开server端后,只要在client端输入server端IP即可使用。 程序具有上传、下载、查看目录文件、更改目录等功能
fopen socket文件传输程序(用fopen).rar
该程序基于MFC-SOCKET 实现的一个文件传输,传输速度和飞Q一样快,界面美观 为让大家放心,我所有传的资源都有截图可以到这里看截图 http://blog.163.com/heyulun_2008/album/#m=0&p=1
Java基于Socket文件传输示例Java基于Socket文件传输示例Java基于Socket文件传输示例
基于linux下socket文件传输,给新手作一下参考,代码已经过验证。
Socket文件传输源码 asp.net版Socket文件传输源码 asp.net版Socket文件传输源码 asp.net版Socket文件传输源码 asp.net版Socket文件传输源码 asp.net版
简单socket文件传输(类似FTP)客户端 实现断点续传和多线程,
c# socket 文件传输 源码 即时 中文 字符c# socket 文件传输 源码 即时 中文 字符c# socket 文件传输 源码 即时 中文 字符
socket文件传输_断点_大文件都可以_vs2003