java多线程网络传输文件非同步Word下载.docx

上传人:b****2 文档编号:5721985 上传时间:2023-05-05 格式:DOCX 页数:16 大小:20.18KB
下载 相关 举报
java多线程网络传输文件非同步Word下载.docx_第1页
第1页 / 共16页
java多线程网络传输文件非同步Word下载.docx_第2页
第2页 / 共16页
java多线程网络传输文件非同步Word下载.docx_第3页
第3页 / 共16页
java多线程网络传输文件非同步Word下载.docx_第4页
第4页 / 共16页
java多线程网络传输文件非同步Word下载.docx_第5页
第5页 / 共16页
java多线程网络传输文件非同步Word下载.docx_第6页
第6页 / 共16页
java多线程网络传输文件非同步Word下载.docx_第7页
第7页 / 共16页
java多线程网络传输文件非同步Word下载.docx_第8页
第8页 / 共16页
java多线程网络传输文件非同步Word下载.docx_第9页
第9页 / 共16页
java多线程网络传输文件非同步Word下载.docx_第10页
第10页 / 共16页
java多线程网络传输文件非同步Word下载.docx_第11页
第11页 / 共16页
java多线程网络传输文件非同步Word下载.docx_第12页
第12页 / 共16页
java多线程网络传输文件非同步Word下载.docx_第13页
第13页 / 共16页
java多线程网络传输文件非同步Word下载.docx_第14页
第14页 / 共16页
java多线程网络传输文件非同步Word下载.docx_第15页
第15页 / 共16页
java多线程网络传输文件非同步Word下载.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

java多线程网络传输文件非同步Word下载.docx

《java多线程网络传输文件非同步Word下载.docx》由会员分享,可在线阅读,更多相关《java多线程网络传输文件非同步Word下载.docx(16页珍藏版)》请在冰点文库上搜索。

java多线程网络传输文件非同步Word下载.docx

javaFileServer.TransferServer端口文件夹路径

javaFileServer.TransferServer2008F:

\tempFolder

文件传输服务端---------------------------------------------------------

packageFileServer;

importjava.io.DataInputStream;

importjava.io.DataOutputStream;

importjava.io.File;

importjava.io.IOException;

importjava.io.InputStream;

importjava.io.OutputStream;

importjava.io.RandomAccessFile;

import.ServerSocket;

import.Socket;

import.SocketException;

/**

*DescriptionSocket文件传输服务端

*默认支持多线程传输,未支持断点续传,未支持内网UDF传输

*CreationDate07-08-20089:

00

*@author

*@version1.0

*/

publicclassTransferServer{

*@paramargs[0]端口默认2008(例:

2008)

*@paramargs[1]接收文件存放路径,默认:

和FileServer同一目录\ServerReceive

(例:

x:

\example\example\)

*/

publicstaticvoidmain(String[]args){

try{

intserPort=2008;

//服务器默认端口2008

StringtempFolder=System.getProperty("

user.dir"

)+"

\\ServerReceive"

;

//临时文件夹,用于存放接收文件

ServerSocketss=null;

//设定Socket

if(args.length<

1||null==args){

ss=newServerSocket(serPort);

}else{

//检测输入端口是否正确

if(args[0].replaceAll("

\\D"

"

"

)!

="

){

serPort=Integer.parseInt(args[0].replaceAll("

));

System.out.println("

输入的端口有错误,使用系统默认端口"

);

}

if(args[1].length()>

0){

tempFolder=args[1];

WelcometoTransferServer"

服务器启动,监听端口"

+ss.getLocalPort());

服务器临时文件路径:

"

+tempFolder);

while(true){

Sockets=ss.accept();

newThread(newServerThread(s,tempFolder)).start();

}catch(IOExceptione){

e.getMessage();

服务器端口被占用,或其他问题."

*Description服务器线程

*@author卢俊宇

*@paramtempFolder接收文件存放路径,默认:

TransferServer.class所在目录\ServerReceive

*@version1.1

classServerThreadimplementsRunnable{

Sockets;

//实例化socket类

privateStringtempFolder;

//临时文件夹名

publicServerThread(Sockets,StringtempFolder){

this.s=s;

this.tempFolder=tempFolder;

@SuppressWarnings("

deprecation"

publicvoidrun(){

InputStreamins=s.getInputStream();

OutputStreamouts=s.getOutputStream();

DataInputStreamdis=newDataInputStream(ins);

DataOutputStreamdos=newDataOutputStream(outs);

//取得线程ID

StringSerID="

SerID-"

+Thread.currentThread().getId();

StringinStr=dis.readUTF();

//接收到的文件包含头信息

if(inStr!

=null){

//对收到的socket包过滤出文件信息

if(inStr.contains("

ClientInfo"

)){

System.out.println(SerID+"

getFileInfo!

//文件名字

StringfName=newString(inStr.replaceAll(

(.+<

FileName>

)|(<

\\/FileName>

\\S+)"

.toString().getBytes("

utf-8"

),"

//文件总长度

StringfSize=newString(inStr.replaceAll(

FileLength>

)|<

\\/FileLength>

size:

+fSize);

longSize=Long.parseLong(fSize);

//区块起始长度

StringfPs=newString(

inStr

.replaceAll(

FilePointerStart>

/FilePointerStart>

).toString().getBytes(

PS:

+fPs);

//区块结束长度

StringfPe=newString(

FilePointerEnd>

/FilePointerEnd>

PE:

+fPe);

longPointS=Long.parseLong(fPs);

//分块头

longPointE=Long.parseLong(fPe);

//分块尾

SourceFileName:

+fName);

FiletempF=newFile(tempFolder,fName);

if(!

tempF.exists()){

//检测目标文件夹是否存在

if(newFile(tempFolder).isDirectory()){

TempFile.creat(tempF,Size);

//如果临时文件不存在就建立

booleancreat=newFile(tempFolder).mkdirs();

if(creat){

Error:

Systemcannotcreatfolder!

System.out.println(SerID+"

exits"

dis.close();

//关闭包类

dos.close();

//关闭输出流

s.close();

//关连接

Thread.currentThread().stop();

//返回服务器准备好了

StringSerReady=SerID+"

ServerReady=1"

dos.writeUTF(SerReady);

//返回服务器信息

dos.flush();

//取得客户端发送标志"

SendStart"

if(dis.readUTF().equals("

//随机读写文件(适应多线程方式)

RandomAccessFilefos=newRandomAccessFile(

tempF.getPath(),"

rw"

longcurPoint=PointS;

//文件指针起点

longendSet=PointE;

//文件指针终点

longnowSize=0;

//已读/写字节

byte[]buffer=newbyte[1024];

//建立缓冲区

while(curPoint<

endSet){

intlength=0;

if((endSet-curPoint+1)<

1024){

fos.seek(curPoint);

//寻找写入位置

byte[]bufferM=newbyte[(int)(endSet

-curPoint+1)];

//调整缓冲区大小

length=ins.read(bufferM);

//读取bufferM缓冲socket流

fos.write(bufferM);

//将取得的socket流写入文件

dos.writeUTF("

SerGotIt"

curPoint+=length;

//文件指针增加

nowSize+=length;

fos.close();

//向发送接收结束标志

ReciveEnd"

System.out.println(SerID

+"

isreceiveok."

break;

e.printStackTrace();

}else{

length=ins.read(buffer);

isabnormallyclosed."

if(length==buffer.length){

//将缓冲区字节写入文件

System.out

.println(SerID

receive"

+buffer.length

bytes."

fos.write(buffer);

curPoint+=buffer.length;

//指针+1024

nowSize+=buffer.length;

指针位置"

+curPoint);

线程size写入进度:

+nowSize);

//接收到客户端结束标志,跳出循环

SendEnd"

服务器接收完毕"

}catch(SocketExceptions){

//s.printStackTrace();

//客户端非正常退出处理

exited."

文件传输客户端

-----------------------------------------------------------

import.InetAddress;

import.UnknownHostException;

importjava.text.SimpleDateFormat;

importjava.util.Date;

*DescriptionSocket文件传输客户端(默认支持多线程传输,未支持断点续传,未支持内网UDF传输)

publicclassTransferClient{

*Description文件传输客户端

*

*@paramargs[0]

文件路径+文件名(例:

\example\example.class)

*@paramargs[1]

服务器IP地址(例:

192.168.1.1)

*@paramargs[2]

端口默认2008(例:

*@paramargs[3]

区块长度默认5(例:

5)

//默认连接端口2008;

intblockNum=5;

//文件区块数量(同时决定线程数)

StringserIP="

192.168.1.105"

//服务器IP

StringfilePath="

e:

\\1.rar"

//欲发送文件路径+文件名

采用默认配置连接"

if(args[0].length()>

filePath=args[0];

serIP=args[1];

if(args[2].length()>

serPort=Integer.parseInt(args[2]);

if(args[3].length()>

blockNum=Integer.parseInt(args[3].replaceAll("

文件路径:

+filePath);

连接IP:

+serIP);

连接端口:

+serPort);

线程数:

+blockNum);

//取得文件信息

Filesource=newFile(filePath);

source.exists()){

要传输的文件不存在!

System.exit(0);

longfSize=source.length(

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 考试认证 > 司法考试

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2