分享
 
 
 

局域网文件传输和复制,含文件名

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

局域网文件传输和复制,含文件名

实施局域网内文件复制,包括需要把文件名也拷贝过去。特点是文件名传输和文件传输动用了两个端口。进程完成这样的功能:每隔24小时进

行上传一次,保持两台机器的根目录下文件一致。

1:服务器端,也既待上传端。运行命令:java FileServer 3107

import java.io.*;

import java.net.*;

public class FileServer implements Runnable {

private static int ipsocket = 0;

public static void main(String[] args)throws Exception{

ipsocket = Integer.parseInt(args[0]);

//建议使用3107

System.out.println("系统在端口:" + ipsocket + "等待发送");

Thread t1 = new Thread(new FileServer());

t1.start();

}

public void run(){

while(true){

try{

String[] fileNames = seachFileName(1);

if(fileNames == null || fileNames.length < 1) return;

for(int i = 0; i < fileNames.length; i ++){

sendFileName(fileNames[i]);

sendFile(fileNames[i]);

}

Thread.sleep(24 * 60 * 60 * 1000); //24小时

}catch(Exception e) {

System.out.println(e);

}

}

}

/*

listType = 0 返回含文件夹和文件

listType = 1 只返回文件

*/

public static String[] seachFileName(int listType) throws Exception{

String directory = ".";

File dir = new File(directory);

File dirTemp;

String[] filesTemp;

String[] fileNames;

String[] re;

int length = 0;

if (!dir.isDirectory())

throw new IllegalArgumentException("FileList: no such directory");

filesTemp = dir.list();

java.util.Arrays.sort(filesTemp);

for(int i = 0; i < filesTemp.length; i++) {

dirTemp = new File(directory + "\\" + filesTemp[i]);

if(!dirTemp.isDirectory()){

length++;

}

}

fileNames = new String[length];

length = 0;

for(int i = 0; i < filesTemp.length; i++) {

dirTemp = new File(directory + "\\" + filesTemp[i]);

if(!dirTemp.isDirectory()){

fileNames[length] = filesTemp[i];

}

length++;

}

if(listType == 0) re = filesTemp;

else re = fileNames;

return re;

}

/*发文件名

*/

private static void sendFileName(String fileNames) throws Exception{

if(fileNames == null) return;

//创建网络服务器接受客户请求

ServerSocket ss=new ServerSocket(ipsocket);

Socket client=ss.accept();

//创建网络输出流并提供数据包装器

OutputStream netOut=client.getOutputStream();

OutputStream doc=new DataOutputStream(new BufferedOutputStream(netOut));

//创建文件读取缓冲区

byte[] buf=null;

String fileName = fileNames;

buf = fileName.getBytes();

int num=buf.length;

if(num > 0){//是否读完文件

doc.write(buf,0,num);//把文件数据写出网络缓冲区

doc.flush();//刷新缓冲区把数据写往客户端

}

doc.close();

ss.close();

}

/*发文件本身

*/

private static void sendFile(String fileName) throws Exception{

if(fileName == null) return;

//创建文件流用来读取文件中的数据

File file=new File(fileName);

FileInputStream fos=new FileInputStream(file);

//创建网络服务器接受客户请求

ServerSocket ss=new ServerSocket(ipsocket + 1);

Socket client=ss.accept();

//创建网络输出流并提供数据包装器

OutputStream netOut=client.getOutputStream();

OutputStream doc=new DataOutputStream(new BufferedOutputStream(netOut));

//创建文件读取缓冲区

byte[] buf=new byte[2048];

int num=fos.read(buf);

while(num!=(-1)){//是否读完文件

doc.write(buf,0,num);//把文件数据写出网络缓冲区

doc.flush();//刷新缓冲区把数据写往客户端

num=fos.read(buf);//继续从文件中读取数据

}

fos.close();

doc.close();

ss.close();

}

}

2:客户端,也既文件接受端。运行命令:java FileClient 127.0.0.1 3107。注意跟服务器端口要一致。

import java.io.*;

import java.net.*;

public class FileClient implements Runnable {

private static String ip = "";

private static int ipsocket = 0;

public static void main(String[] args)throws Exception{

ip = args[0];

ipsocket = Integer.parseInt(args[1]);

//建议使用3107

System.out.println("系统在地址@" + ip + ":" + ipsocket + "倾听");

Thread t1 = new Thread(new FileClient());

t1.start();

}

public void run(){

while(true){

try{

String strTemp = getFileName();

getFile(strTemp);

}catch(Exception e){}

try{

Thread.sleep(5 * 1000); //5秒

}catch(Exception e) {

System.out.println(e);

}

}

}

private static String getFileName() throws Exception{

// 通过Socket连接文件服务器

Socket server=new Socket(ip,ipsocket);

//创建网络接受流接受服务器文件数据

InputStream netIn=server.getInputStream();

InputStream in=new DataInputStream(new BufferedInputStream(netIn));

//创建缓冲区缓冲网络数据

byte[] buf=new byte[2048];

int num=in.read(buf);

while(num!=(-1)){//是否读完所有数据

num=in.read(buf);//继续从网络中读取文件

}

String fileName = new String(buf);

fileName = fileName.trim();

in.close();

server.close();

return fileName;

}

private static void getFile(String strTemp) throws Exception{

//使用本地文件系统接受网络数据并存为新文件

File file=new File(strTemp);

//如果文件已经存在,先删除

if(file.exists()) file.delete();

for(int i = 0 ; i < 10000; i++) {}

file.createNewFile();

RandomAccessFile raf=new RandomAccessFile(file,"rw");

// 通过Socket连接文件服务器

Socket server=new Socket(ip,(ipsocket + 1) );

//创建网络接受流接受服务器文件数据

InputStream netIn=server.getInputStream();

InputStream in=new DataInputStream(new BufferedInputStream(netIn));

//创建缓冲区缓冲网络数据

byte[] buf=new byte[2048];

int num=in.read(buf);

while(num!=(-1)){//是否读完所有数据

raf.write(buf,0,num);//将数据写往文件

raf.skipBytes(num);//顺序写文件字节

num=in.read(buf);//继续从网络中读取文件

}

in.close();

raf.close();

server.close();

}

}

关于本文:纯参考用,有意见欢迎BT

luminji@hotmail.comwww.10ms.net

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有