From dc40211f3469682cfe3d37933c213584a99c4338 Mon Sep 17 00:00:00 2001 From: free will <2647778488@qq.com> Date: Tue, 28 Apr 2020 23:02:40 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E4=BA=86=E8=BF=99=E4=BA=9B?= =?UTF-8?q?=E5=A4=A9=E5=9C=A8CUTV=E5=AE=A2=E6=88=B7=E7=AB=AF=E5=81=9A?= =?UTF-8?q?=E7=9A=84=E4=BF=AE=E6=94=B9=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/commons-codec-1.13.jar | Bin 0 -> 344339 bytes ndn/BlockSuccessUsers.properties | 2 + ndn/FileBPRenewal.properties | 0 ndn/settings.properties | 6 +- resources/images/headPhotos/王锋.png | Bin 0 -> 3987 bytes src/main/java/cn/minoa/MainApp.java | 68 +++- .../CongestionWindow.java | 3 +- ...Pool.java => DownLoadClientBPRenewal.java} | 300 +++++++++++++----- .../dataRequestInterface/KeyManager.java | 19 +- ...cePool.java => UpLoadClientBPRenewal.java} | 289 ++++++++++++----- src/main/java/cn/minoa/model/BPRInfo.java | 50 +++ .../java/cn/minoa/util/EncryptionUtil.java | 51 ++- src/main/java/cn/minoa/util/FileBPRUtil.java | 220 +++++++++++++ .../cn/minoa/util/GenerateSettingFiles.java | 144 +++++++++ .../java/cn/minoa/util/KeyStorageUtil.java | 13 +- src/main/java/cn/minoa/util/LoggerUtil.java | 3 +- src/main/java/cn/minoa/util/RegisterUtil.java | 116 +++++++ .../DealSingleReimbursementController.java | 8 +- .../SingleReimbursementDetailsController.java | 5 +- .../cn/minoa/view/login/KeepLoginStatus.java | 24 +- .../view/login/LoginOverviewController.java | 4 +- .../login/NDNBlockChainConnectClient.java | 168 ++++++++-- .../login/RegisterOverviewController.java | 83 +++-- .../view/login/SettingOverviewController.java | 137 +++++++- .../mine/SingleEmailDetailsController.java | 5 +- .../resources/fxml/login/SettingOverview.fxml | 75 +++-- 26 files changed, 1466 insertions(+), 327 deletions(-) create mode 100644 lib/commons-codec-1.13.jar create mode 100644 ndn/BlockSuccessUsers.properties create mode 100644 ndn/FileBPRenewal.properties create mode 100644 resources/images/headPhotos/王锋.png rename src/main/java/cn/minoa/dataRequestInterface/{DownLoadClientBasedFacePool.java => DownLoadClientBPRenewal.java} (52%) rename src/main/java/cn/minoa/dataRequestInterface/{UpLoadClientBasedFacePool.java => UpLoadClientBPRenewal.java} (58%) create mode 100644 src/main/java/cn/minoa/model/BPRInfo.java create mode 100644 src/main/java/cn/minoa/util/FileBPRUtil.java create mode 100644 src/main/java/cn/minoa/util/GenerateSettingFiles.java create mode 100644 src/main/java/cn/minoa/util/RegisterUtil.java diff --git a/lib/commons-codec-1.13.jar b/lib/commons-codec-1.13.jar new file mode 100644 index 0000000000000000000000000000000000000000..bf6ccb385d5f6cfc0930565fc88a049544cd7cd4 GIT binary patch literal 344339 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

ViHB`l3aEBk87} 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 P7gpD0a5-!Z_&V$VHv^iJ literal 0 HcmV?d00001 diff --git a/ndn/BlockSuccessUsers.properties b/ndn/BlockSuccessUsers.properties new file mode 100644 index 0000000..ba345dd --- /dev/null +++ b/ndn/BlockSuccessUsers.properties @@ -0,0 +1,2 @@ +#commit changes: delete a prefix +#Fri Apr 17 20:54:49 CST 2020 diff --git a/ndn/FileBPRenewal.properties b/ndn/FileBPRenewal.properties new file mode 100644 index 0000000..e69de29 diff --git a/ndn/settings.properties b/ndn/settings.properties index 0d69792..8a879cf 100644 --- a/ndn/settings.properties +++ b/ndn/settings.properties @@ -1,7 +1,7 @@ #\u4FEE\u6539\u914D\u7F6E\u6587\u4EF6 -#Wed Apr 08 00:41:05 CST 2020 -KeyName=/testKey_v3 -loginUserName=466D1203678EFB16BE85C8A02E1486B6 +#Tue Apr 28 22:56:20 CST 2020 +KeyName=/王锋 +loginUserName=B94DF2C54EDEA80B50A94EA603DB833E ndnBlockChainIPAddress=116.77.74.139 ServerIPAddress=116.77.74.139 ThreadNumberForFileTransfer=5 diff --git a/resources/images/headPhotos/王锋.png b/resources/images/headPhotos/王锋.png new file mode 100644 index 0000000000000000000000000000000000000000..8b8296bd82dd5093e2f3f12ccc72ac00943c2366 GIT binary patch literal 3987 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 { public void handle(ActionEvent event) { isCancelFileTransferFlag = true; + // 再次关闭进度条监听线程 + listenThread.interrupt(); + // 保存断点信息 + downLoadClient.setPointInfo(); + // 关闭该次传输 + downLoadClient.closeSelf(); + // 弹窗关闭 downloadFileDialogStage.close(); } }); @@ -446,10 +466,12 @@ public class MainApp extends Application { Long startTime = System.currentTimeMillis(); // 滑动窗口协议下载文件 // DownLoadClient downLoadClient = new DownLoadClient(filename,localDir,sliceNum); - DownLoadClientBasedFacePool downLoadClient=new DownLoadClientBasedFacePool(filename, +// DownLoadClientBasedFacePool downLoadClient=new DownLoadClientBasedFacePool(filename, +// localDir,sliceNum,threadNumberForFileTransfer); + downLoadClient=new DownLoadClientBPRenewal(filename, localDir,sliceNum,threadNumberForFileTransfer); //启动一个线程监听更新的传输进度值 - Thread listenThread = new Thread(new Runnable() { + listenThread = new Thread(new Runnable() { @Override public void run() { Long sliceNumLong=sliceNum.longValue(); @@ -618,6 +640,13 @@ public class MainApp extends Application { public void handle(ActionEvent event) { // 手动取消了传输 isCancelFileTransferFlag = true; + // 再次关闭进度条监听线程 + listenThread.interrupt(); + // 上传信息保存到本地 + upLoadClient.setPointInfo(); + // 关闭该次传输 + upLoadClient.closeSelf(); + // 关闭弹窗 uploadFileDialogStage.close(); } }); @@ -648,10 +677,14 @@ public class MainApp extends Application { Long startTime = System.currentTimeMillis(); // 滑动窗口协议上传文件 // UpLoadClient upLoadClient = new UpLoadClient(file, serverpath); - UpLoadClientBasedFacePool upLoadClient=new UpLoadClientBasedFacePool(file, + // 增加了facepool支持的滑动窗口协议 +// UpLoadClientBasedFacePool upLoadClient=new UpLoadClientBasedFacePool(file, +// serverpath,threadNumberForFileTransfer); + // 进一步增加了断点续传支持 + upLoadClient=new UpLoadClientBPRenewal(file, serverpath,threadNumberForFileTransfer); //启动一个线程监听更新的传输进度值 - Thread listenThread = new Thread(new Runnable() { + listenThread = new Thread(new Runnable() { @Override public void run() { long filelen = file.length(); @@ -707,6 +740,7 @@ public class MainApp extends Application { System.out.println("已成功将文件" + file.getAbsolutePath() + "上传至服务器" + serverpath + "目录下。"); // String serverFilePath = serverpath + MinoaDataAPI.getPureFileNameFromWindows(file.getAbsolutePath()); // ECOSUtil.sendUploadFileEndSignal(serverFilePath); +// ECOSUtil.sendECOSUploadEndSignal(serverFilePath); } else { System.out.println("由于未知原因,本地文件" + file.getAbsolutePath() + "上传服务器失败。"); } @@ -723,10 +757,10 @@ public class MainApp extends Application { public boolean uploadFileToServerSharedFolder(File file) { // Integer res=loginerController.sendFileToServer(file, this.sharedFileServerPath); Long startTime = System.currentTimeMillis(); - UpLoadClientBasedFacePool upLoadClient = new UpLoadClientBasedFacePool( + UpLoadClientBPRenewal upLoadClient = new UpLoadClientBPRenewal( file,this.sharedFileServerPath,threadNumberForFileTransfer); // 下载文件 - boolean res = ((UpLoadClientBasedFacePool) upLoadClient).uploadData(); + boolean res = upLoadClient.uploadData(); Long endTime = System.currentTimeMillis(); System.out.println("耗时:" + (endTime - startTime) + "ms"); return res; @@ -897,15 +931,17 @@ public class MainApp extends Application { // 判断是否是登录状态,且账号密码是正确的 boolean m_flag=false; boolean isLoginning= KeepLoginStatus.getLogineStatus(); - Loginer m_loginer=KeepLoginStatus.getLoginerInfo(); - if((isLoginning==true)&&(m_loginer.getUserName()!=null)&&(m_loginer.getPassWord()!=null)){ - System.out.println("login status: "+isLoginning); - System.out.println("loginer name: "+m_loginer.getUserName()); - System.out.println("loginer password: "+m_loginer.getPassWord()); - String loginString=loginerController.getLoginJsonString( - m_loginer.getUserName(),m_loginer.getPassWord()); - if(loginerController.checkPass(loginString)){ - m_flag=true; + if(isLoginning==true){ + Loginer m_loginer=KeepLoginStatus.getLoginerInfo(); + if((m_loginer.getUserName()!=null)&&(m_loginer.getPassWord()!=null)){ + System.out.println("login status: "+isLoginning); + System.out.println("loginer name: "+m_loginer.getUserName()); + System.out.println("loginer password: "+m_loginer.getPassWord()); + String loginString=loginerController.getLoginJsonString( + m_loginer.getUserName(),m_loginer.getPassWord()); + if(loginerController.checkPass(loginString)){ + m_flag=true; + } } } diff --git a/src/main/java/cn/minoa/dataRequestInterface/CongestionWindow.java b/src/main/java/cn/minoa/dataRequestInterface/CongestionWindow.java index acf8690..88ff1ff 100644 --- a/src/main/java/cn/minoa/dataRequestInterface/CongestionWindow.java +++ b/src/main/java/cn/minoa/dataRequestInterface/CongestionWindow.java @@ -160,7 +160,8 @@ public class CongestionWindow { public void cwndDecrease(){ synchronized (this){ if(nIndata >= nSupress){ - this.thresh = Math.floor(this.cwnd/2); +// this.thresh = Math.floor(this.cwnd/2); + this.thresh = this.cwnd/2; this.cwnd = this.thresh; nSupress = (int)(nOutInterest + rate*(nOutInterest - nIndata)); } diff --git a/src/main/java/cn/minoa/dataRequestInterface/DownLoadClientBasedFacePool.java b/src/main/java/cn/minoa/dataRequestInterface/DownLoadClientBPRenewal.java similarity index 52% rename from src/main/java/cn/minoa/dataRequestInterface/DownLoadClientBasedFacePool.java rename to src/main/java/cn/minoa/dataRequestInterface/DownLoadClientBPRenewal.java index f6f1d8b..10ed193 100644 --- a/src/main/java/cn/minoa/dataRequestInterface/DownLoadClientBasedFacePool.java +++ b/src/main/java/cn/minoa/dataRequestInterface/DownLoadClientBPRenewal.java @@ -1,6 +1,8 @@ package cn.minoa.dataRequestInterface; import cn.minoa.MainApp; +import cn.minoa.model.BPRInfo; +import cn.minoa.util.FileBPRUtil; import net.named_data.jndn.*; import net.named_data.jndn.security.KeyChain; import net.named_data.jndn.security.SecurityException; @@ -20,7 +22,7 @@ import java.util.concurrent.atomic.AtomicLong; * @description * @date 2020-03-22 18:28 */ -public class DownLoadClientBasedFacePool { +public class DownLoadClientBPRenewal { // 下载前缀 private String orderPrefix = "/downloadFile"; @@ -51,13 +53,23 @@ public class DownLoadClientBasedFacePool { // 收到回复的数量 public AtomicLong recvCount = new AtomicLong(0); + // 断点续传:此偏移量/序号之前的文件部分已经全部传输成功 + private AtomicLong successPoint=new AtomicLong(0); + // 断点续传:point及其之后的兴趣包,已经传输成功的兴趣包序号 + private Map successList = new ConcurrentHashMap<>(); + // 断点续传:当前文件哈希值 + private String fileHashString; + //发送的数据是否发送成功,key:第几个数据片,从0开始,value:该数据片超时次数 private Map timeOutNums = new ConcurrentHashMap<>(); // 超时重传上限数值,某个兴趣包的重传次数超过此数值,则放弃重传,直接返回false private Integer timeoutCeil=15; - public DownLoadClientBasedFacePool(String filename, String localDir, - Integer sliceNumber, Integer facepoolnumber) { + // 标记该次传输是否关闭 + private boolean isClosed; + + public DownLoadClientBPRenewal(String filename, String localDir, + Integer sliceNumber, Integer facepoolnumber) { this.filename = filename; this.localDir = localDir; System.out.println("localDir: "+this.localDir); @@ -65,6 +77,59 @@ public class DownLoadClientBasedFacePool { this.facePool=new FacePool(facepoolnumber); this.facePool.start(MinoaDataAPI.minoaServerIpString, MinoaDataAPI.minoaServerPortInteger); System.out.println("***********FacePool中并发数:"+facepoolnumber+"***********"); + fileHashString=filename+"_"+sliceNumber; + isClosed=false; + } + + /* + * 传入一个刚被后台成功响应的兴趣包序号, + * 判断[point,current]之间的兴趣包序号是否全部被成功响应 + */ + private boolean isAllOK(Long point,Long currentNo){ + for(Long i=point;i<=currentNo;i++){ + if(!successList.containsKey(i)){ + return false; + } + } + return true; + } + + // 移除successList中已经成功发送的部分,减少内存占用 + private void mvSuccessNum(Long fromNo,Long toNo){ + for(Long i=fromNo;i<=toNo;i++){ + successList.remove(i); + } + } + + // 对每个成功收到200应答的兴趣包执行如下程序, + // 以维持断点续传的功能 + private void refreshSuccessPoint(Long sliceNo){ + // 当前断点 + Long point=successPoint.get(); + // 加入successList + successList.put(sliceNo,true); + // 如果当前断点到新收到数据包之间的兴趣包全部成功响应, + // 更新断点,并清理内存 + if(isAllOK(point,sliceNo)){ + successPoint.getAndSet(sliceNo+1); + mvSuccessNum(point,sliceNo); + } + } + + + // 将本次传输的断点信息保存到本地 + public void setPointInfo(){ + String fileName= MinoaDataAPI.getPureFileName(filename); + FileBPRUtil.setUploadBreakPointInfo( + fileHashString,fileName,localDir,successPoint.get()); + System.out.println("保存断点信息成功!!!"); + } + + // 移除已经上传成功的文件断点信息 + private void rmPointInfo(){ + if(FileBPRUtil.isHaveUploadBreakPointInfo(fileHashString)){ + FileBPRUtil.deleteUploadBreakPointInfo(fileHashString); + } } /** @@ -81,6 +146,21 @@ public class DownLoadClientBasedFacePool { return false; } + // 由于点击取消传输之后弹窗关闭, + // 该文件类可能会继续发送数据,或有其它继续执行的代码 + // 这里增加一个函数进行关闭操作 + public void closeSelf(){ + try { + this.randomAccessFile.close(); + System.out.println("本地文件关闭"); + } catch (IOException e) { + System.out.println("取消传输时关闭文件报错:"+e.getMessage()); + } + this.facePool.shutdownNow(); + this.isClosed=true; + } + + /** * 下载数据的主函数 * @@ -96,21 +176,45 @@ public class DownLoadClientBasedFacePool { e.printStackTrace(); } - while (true) { - //判断是否已经上传安成 + // 判断是否有断点续传记录 + if(FileBPRUtil.isHaveUploadBreakPointInfo(fileHashString)){ + // 有记录,则判断文件名和服务器地址是否一致 + BPRInfo bprInfo=FileBPRUtil.getUploadBreakPointInfo(fileHashString); + String fileName= MinoaDataAPI.getPureFileName(filename); + if((!(bprInfo==null)) + &&bprInfo.getFileName().equals(fileName) + &&bprInfo.getFileLocator().equals(localDir)){ + // 都一致,则更新recvCount\currentOffset\successPoint + System.out.println("即将开始断点续传..."); + recvCount.getAndSet(bprInfo.getPoint()); + currentSliceNo=(int)recvCount.get(); + successPoint.getAndSet(bprInfo.getPoint()); + }else{ + System.out.println("即将开始文件下载..."); + } + }else { + System.out.println("即将开始文件下载..."); + } + + while (!isClosed) { + //判断是否已经下载完成 if (recvCount.longValue()>=this.sliceNumber) { break; } - // 判断是否已经被用户终止上传 + // 判断是否已经被用户终止下载 if(MainApp.isCancelFileTransferFlag){ System.out.println("用户已主动中断下载"); - try { - this.randomAccessFile.close(); - System.out.println("本地文件关闭"); - } catch (IOException e) { - e.printStackTrace(); - } +// try { +// this.randomAccessFile.close(); +// System.out.println("本地文件关闭"); +// } catch (IOException e) { +// e.printStackTrace(); +// } +// this.facePool.shutdownNow(); + closeSelf(); + // 保存断点信息 + setPointInfo(); return false; } @@ -143,25 +247,31 @@ public class DownLoadClientBasedFacePool { if(isTimeOut()){ System.out.println("丢包超过阈值: "+timeoutCeil+" ,文件传输主动中断"); - this.facePool.shutdownNow(); - try { - this.randomAccessFile.close(); - System.out.println("本地文件关闭"); - } catch (IOException e) { - e.printStackTrace(); - } +// try { +// this.randomAccessFile.close(); +// System.out.println("本地文件关闭"); +// } catch (IOException e) { +// e.printStackTrace(); +// } +// this.facePool.shutdownNow(); + closeSelf(); + // 保存断点信息 + setPointInfo(); return false; } } - this.facePool.shutdownNow(); - try { - this.randomAccessFile.close(); - System.out.println("本地文件关闭"); - } catch (IOException e) { - e.printStackTrace(); - } +// try { +// this.randomAccessFile.close(); +// System.out.println("本地文件关闭"); +// } catch (IOException e) { +// e.printStackTrace(); +// } +// this.facePool.shutdownNow(); + closeSelf(); + // 更新断点信息 + rmPointInfo(); return true; } @@ -240,10 +350,11 @@ public class DownLoadClientBasedFacePool { @Override public void onData(Interest interest, Data data) { - // 将文件数据片写入本地文件 - try { - synchronized (randomAccessFile) { - System.out.println("开始写入文件数据分片... :" + localDir + localName); + if(!isClosed) { + // 将文件数据片写入本地文件 + try { + synchronized (randomAccessFile) { + System.out.println("开始写入文件数据分片... :" + localDir + localName); // RandomAccessFile randomAccessFile = new RandomAccessFile(localDir + localName, "rw"); // int contentSize = data.getContent().size(); // System.out.println("该数据分片长度为:" + contentSize); @@ -251,80 +362,93 @@ public class DownLoadClientBasedFacePool { // for (int i = 0; i < contentSize; i++) { // content[i] = data.getContent().buf().get(i); // } - // 设置数据分片写入到文件的起点位置 - randomAccessFile.seek(sliceNo * MainApp.sliceSize); - // 写入数据分片 - randomAccessFile.write(data.getContent().getImmutableArray()); + // 设置数据分片写入到文件的起点位置 + long offset=((long)sliceNo) * ((long) MainApp.sliceSize); + try{ + randomAccessFile.seek(offset); + }catch (IOException e){ + // 说明文件流已经关闭,则不继续执行 + return ; + } + // 写入数据分片 + randomAccessFile.write(data.getContent().getImmutableArray()); // randomAccessFile.write(content, 0, contentSize); // randomAccessFile.close(); - System.out.println("写入文件数据分片完毕:" + localDir + localName); + System.out.println("写入文件数据分片完毕:" + localDir + localName); + } + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); } - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); + + // 滑动窗口:flight-- + congestionWindow.inFlightDecrease(); + // 收到成功数据的数量++ + recvCount.incrementAndGet(); + // 滑动窗口:inData++ + congestionWindow.nIndataIncrease(); + // 刷新断点 + refreshSuccessPoint((long)sliceNo); + System.out.println("第" + sliceNo + "片下载成功!"); + + // 处理拥塞:拥塞标记返回值,无意义,大于0就表示拥塞,直接进行窗口减小操作即可 + if (data.getCongestionMark() > 0) { + System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&网络拥塞,滑动窗口减小,getCongestionMark:" + data.getCongestionMark()); + // 滑动窗口:cwndDecrease() + congestionWindow.cwndDecrease(); + } else { + // 滑动窗口:cwndIncrease() + congestionWindow.cwndIncrease(); + } + + if (timeOutNums.containsKey(this.sliceNo)) { + timeOutNums.remove(this.sliceNo); + } + + // 处理完成 + isFinished = true; } - - // 滑动窗口:flight-- - congestionWindow.inFlightDecrease(); - // 收到成功数据的数量++ - recvCount.incrementAndGet(); - // 滑动窗口:inData++ - congestionWindow.nIndataIncrease(); - System.out.println("第" + sliceNo + "片下载成功!"); - - // 处理拥塞:拥塞标记返回值,无意义,大于0就表示拥塞,直接进行窗口减小操作即可 - if (data.getCongestionMark() > 0) { - System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&网络拥塞,滑动窗口减小,getCongestionMark:" + data.getCongestionMark()); - // 滑动窗口:cwndDecrease() - congestionWindow.cwndDecrease(); - }else{ - // 滑动窗口:cwndIncrease() - congestionWindow.cwndIncrease(); - } - - if(timeOutNums.containsKey(this.sliceNo)){ - timeOutNums.remove(this.sliceNo); - } - - // 处理完成 - isFinished = true; } // 处理兴趣包超时 @Override public void onTimeout(Interest interest) { - // 滑动窗口:flight-- - congestionWindow.inFlightDecrease(); - // 加入失败队列 - failedSlice.add(sliceNo); - // 打印超时信息 - System.out.println("########## Time out for interest " + interest.getName()+"###########"); + if(!isClosed) { + // 滑动窗口:flight-- + congestionWindow.inFlightDecrease(); + // 加入失败队列 + failedSlice.add(sliceNo); + // 打印超时信息 + System.out.println("########## Time out for interest " + interest.getName() + "###########"); - if(timeOutNums.containsKey(this.sliceNo)){ - int value = timeOutNums.get(this.sliceNo) + 1; - timeOutNums.put(this.sliceNo,value); - }else{ - timeOutNums.put(this.sliceNo,1); + if (timeOutNums.containsKey(this.sliceNo)) { + int value = timeOutNums.get(this.sliceNo) + 1; + timeOutNums.put(this.sliceNo, value); + } else { + timeOutNums.put(this.sliceNo, 1); + } + // 处理完成 + isFinished = true; } - // 处理完成 - isFinished = true; } // 处理收到一个Nack包 @Override - public void onNetworkNack(Interest interest, NetworkNack networkNack){ - congestionWindow.inFlightDecrease(); - failedSlice.add(sliceNo); - if(timeOutNums.containsKey(this.sliceNo)){ - int value = timeOutNums.get(this.sliceNo) + 1; - timeOutNums.put(this.sliceNo,value); - }else{ - timeOutNums.put(this.sliceNo,1); + public void onNetworkNack(Interest interest, NetworkNack networkNack) { + if (!isClosed) { + congestionWindow.inFlightDecrease(); + failedSlice.add(sliceNo); + if (timeOutNums.containsKey(this.sliceNo)) { + int value = timeOutNums.get(this.sliceNo) + 1; + timeOutNums.put(this.sliceNo, value); + } else { + timeOutNums.put(this.sliceNo, 1); + } + // 打印超时信息 + System.out.println("########## Nack for interest " + interest.getName() + + ", Nack: " + networkNack.toString()); + isFinished = true; } - // 打印超时信息 - System.out.println("########## Nack for interest " + interest.getName() - +", Nack: "+networkNack.toString()); - isFinished=true; } } diff --git a/src/main/java/cn/minoa/dataRequestInterface/KeyManager.java b/src/main/java/cn/minoa/dataRequestInterface/KeyManager.java index 69fd0e1..a31544f 100644 --- a/src/main/java/cn/minoa/dataRequestInterface/KeyManager.java +++ b/src/main/java/cn/minoa/dataRequestInterface/KeyManager.java @@ -2,15 +2,14 @@ package cn.minoa.dataRequestInterface; import net.named_data.jndn.Name; import net.named_data.jndn.security.KeyChain; -import net.named_data.jndn.security.pib.Pib; -import net.named_data.jndn.security.pib.PibIdentity; -import net.named_data.jndn.security.pib.PibImpl; -import net.named_data.jndn.security.pib.PibSqlite3; +import net.named_data.jndn.security.pib.*; import net.named_data.jndn.security.tpm.Tpm; import net.named_data.jndn.security.tpm.TpmBackEnd; import net.named_data.jndn.security.tpm.TpmBackEndFile; import net.named_data.jndn.security.v2.CertificateV2; +import java.io.File; + public enum KeyManager { INSTANCE; private KeyChain keyChain = null; @@ -42,8 +41,10 @@ public enum KeyManager { private KeyChain getOrBuildKeyChain(String identityName) throws KeyChain.Error, PibImpl.Error, Pib.Error, Tpm.Error, TpmBackEnd.Error, CertificateV2.Error { KeyChain keyChain = null; - PibSqlite3 pibSqlite3 = new PibSqlite3("./ndn/pid"); - TpmBackEndFile tpmBackEndFile = new TpmBackEndFile("./ndn/tpm"); + PibSqlite3 pibSqlite3=new PibSqlite3("." + File.separator + "ndn"+ + File.separator+"pid"); + TpmBackEndFile tpmBackEndFile = new TpmBackEndFile("." + File.separator + "ndn"+ + File.separator+"tpm"); try { keyChain = new KeyChain(pibSqlite3, tpmBackEndFile); PibIdentity identity = keyChain.getPib().getIdentity(new Name(identityName)); @@ -63,8 +64,10 @@ public enum KeyManager { public boolean isInKeyChain(String identityName) throws KeyChain.Error, PibImpl.Error, Pib.Error, Tpm.Error, TpmBackEnd.Error, CertificateV2.Error { KeyChain keyChain = null; - PibSqlite3 pibSqlite3 = new PibSqlite3("./ndn/pid"); - TpmBackEndFile tpmBackEndFile = new TpmBackEndFile("./ndn/tpm"); + PibSqlite3 pibSqlite3=new PibSqlite3("." + File.separator + "ndn"+ + File.separator+"pid"); + TpmBackEndFile tpmBackEndFile = new TpmBackEndFile("." + File.separator + "ndn"+ + File.separator+"tpm"); try { keyChain = new KeyChain(pibSqlite3, tpmBackEndFile); PibIdentity identity = keyChain.getPib().getIdentity(new Name(identityName)); diff --git a/src/main/java/cn/minoa/dataRequestInterface/UpLoadClientBasedFacePool.java b/src/main/java/cn/minoa/dataRequestInterface/UpLoadClientBPRenewal.java similarity index 58% rename from src/main/java/cn/minoa/dataRequestInterface/UpLoadClientBasedFacePool.java rename to src/main/java/cn/minoa/dataRequestInterface/UpLoadClientBPRenewal.java index d9f42fa..084d18f 100644 --- a/src/main/java/cn/minoa/dataRequestInterface/UpLoadClientBasedFacePool.java +++ b/src/main/java/cn/minoa/dataRequestInterface/UpLoadClientBPRenewal.java @@ -1,6 +1,9 @@ package cn.minoa.dataRequestInterface; - +// 在原来基于FacePool上传文件的基础上, +// 增加断点续传功能 import cn.minoa.MainApp; +import cn.minoa.model.BPRInfo; +import cn.minoa.util.FileBPRUtil; import cn.minoa.util.StringByteLengthUtil; import net.named_data.jndn.*; import net.named_data.jndn.security.KeyChain; @@ -24,7 +27,7 @@ import java.util.concurrent.atomic.AtomicLong; * @description * @date 2020-03-22 18:28 */ -public class UpLoadClientBasedFacePool { +public class UpLoadClientBPRenewal { private String orderPrefix = "/uploadFile"; @@ -49,24 +52,104 @@ public class UpLoadClientBasedFacePool { private ConcurrentLinkedQueue failedSlice = new ConcurrentLinkedQueue<>(); //发送的数据是否发送成功,key:第几个数据片,从0开始,value:是否发送成功 - private Map sendRes = new ConcurrentHashMap<>(); +// private Map sendRes = new ConcurrentHashMap<>(); //收到回复的数量 public AtomicLong recvCount = new AtomicLong(0); + // 断点续传:此偏移量/序号之前的文件部分已经全部传输成功 + private AtomicLong successPoint=new AtomicLong(0); + // 断点续传:point及其之后的兴趣包,已经传输成功的兴趣包序号 + private Map successList = new ConcurrentHashMap<>(); + // 断点续传:当前文件哈希值 + private String fileHashString; + //发送的数据是否发送成功,key:第几个数据片,从0开始,value:该数据片超时次数 private Map timeOutNums = new ConcurrentHashMap<>(); // 超时重传上限数值,某个兴趣包的重传次数超过此数值,则放弃重传,直接返回false private Integer timeoutCeil=15; - public UpLoadClientBasedFacePool(File file, String serverPath, Integer facepoolnumber){ + // 标记该次传输的状态 + private boolean isClosed; + + public UpLoadClientBPRenewal(File file, String serverPath, Integer facepoolnumber){ this.file = file; this.serverPath = serverPath; this.facePool=new FacePool(facepoolnumber); this.facePool.start(MinoaDataAPI.minoaServerIpString, MinoaDataAPI.minoaServerPortInteger); System.out.println("***********FacePool中并发数:"+facepoolnumber+"***********"); +// fileHashString= EncryptionUtil.getFileHash(file.getAbsolutePath()); + fileHashString= MinoaDataAPI.getPureFileNameFromWindows(file.getAbsolutePath()) + +"_"+file.length(); + isClosed=false; } + // 由于点击取消传输之后弹窗关闭, + // 该文件类可能会继续发送数据,或有其它继续执行的代码 + // 这里增加一个函数进行关闭操作 + public void closeSelf(){ + try { + this.randomAccessFile.close(); + System.out.println("本地文件关闭"); + } catch (IOException e) { + System.out.println("取消传输时关闭文件报错:"+e.getMessage()); + } + this.facePool.shutdownNow(); + this.isClosed=true; + } + + /* + * 传入一个刚被后台成功响应的兴趣包序号, + * 判断[point,current]之间的兴趣包序号是否全部被成功响应 + */ + private boolean isAllOK(Long point,Long currentNo){ + for(Long i=point;i<=currentNo;i++){ + if(!successList.containsKey(i)){ + return false; + } + } + return true; + } + + // 移除successList中已经成功发送的部分,减少内存占用 + private void mvSuccessNum(Long fromNo,Long toNo){ + for(Long i=fromNo;i<=toNo;i++){ + successList.remove(i); + } + } + + // 对每个成功收到200应答的兴趣包执行如下程序, + // 以维持断点续传的功能 + private void refreshSuccessPoint(Long sliceNo){ + // 当前断点 + Long point=successPoint.get(); + // 加入successList + successList.put(sliceNo,true); + // 如果当前断点到新收到数据包之间的兴趣包全部成功响应, + // 更新断点,并清理内存 + if(isAllOK(point,sliceNo)){ + successPoint.getAndSet(sliceNo+1); + mvSuccessNum(point,sliceNo); + } + } + + + // 将本次传输的断点信息保存到本地 + public void setPointInfo(){ + String fileName= MinoaDataAPI.getPureFileNameFromWindows(file.getAbsolutePath()); + FileBPRUtil.setUploadBreakPointInfo( + fileHashString,fileName,serverPath,successPoint.get()); + System.out.println("保存断点信息成功!!!"); + } + + // 移除已经上传成功的文件断点信息 + private void rmPointInfo(){ + if(FileBPRUtil.isHaveUploadBreakPointInfo(fileHashString)){ + FileBPRUtil.deleteUploadBreakPointInfo(fileHashString); + } + } + + /** * 判断是否含有超时次数超过阈值的 * @return @@ -94,14 +177,35 @@ public class UpLoadClientBasedFacePool { e.printStackTrace(); } + // 初始化sliceNumbers if(file.length()% MainApp.sliceSize == 0){ sliceNumbers = file.length()/ MainApp.sliceSize; }else{ sliceNumbers = file.length()/ MainApp.sliceSize + 1; } - while(true){ - //判断是否已经上传安成 + // 判断是否有断点续传记录 + if(FileBPRUtil.isHaveUploadBreakPointInfo(fileHashString)){ + // 有记录,则判断文件名和服务器地址是否一致 + BPRInfo bprInfo=FileBPRUtil.getUploadBreakPointInfo(fileHashString); + String fileName= MinoaDataAPI.getPureFileNameFromWindows(file.getAbsolutePath()); + if((!(bprInfo==null)) + &&bprInfo.getFileName().equals(fileName) + &&bprInfo.getFileLocator().equals(serverPath)){ + // 都一致,则更新recvCount\currentOffset\successPoint + System.out.println("即将开始断点续传..."); + recvCount.getAndSet(bprInfo.getPoint()); + currentOffset=recvCount.get()* MainApp.sliceSize; + successPoint.getAndSet(bprInfo.getPoint()); + }else{ + System.out.println("即将开始文件上传..."); + } + }else { + System.out.println("即将开始文件上传..."); + } + + while(!isClosed){ + // 判断是否已经上传完成 if(sliceNumbers <= recvCount.longValue()){ break; } @@ -109,12 +213,16 @@ public class UpLoadClientBasedFacePool { // 判断是否已经被用户终止上传 if(MainApp.isCancelFileTransferFlag){ System.out.println("用户已主动中断上传"); - try { - this.randomAccessFile.close(); - System.out.println("本地文件关闭"); - } catch (IOException e) { - e.printStackTrace(); - } +// try { +// this.randomAccessFile.close(); +// System.out.println("本地文件关闭"); +// } catch (IOException e) { +// e.printStackTrace(); +// } +// this.facePool.shutdownNow(); + closeSelf(); + // 保存断点信息 + setPointInfo(); return false; } @@ -145,30 +253,35 @@ public class UpLoadClientBasedFacePool { } congestionWindow.inFlightIncrease(); congestionWindow.nOutInterestIncrease(); - } if(isTimeOut()){ System.out.println("丢包超过阈值: "+timeoutCeil+" ,文件传输主动中断"); - this.facePool.shutdownNow(); - try { - this.randomAccessFile.close(); - System.out.println("本地文件关闭"); - } catch (IOException e) { - e.printStackTrace(); - } +// try { +// this.randomAccessFile.close(); +// System.out.println("本地文件关闭"); +// } catch (IOException e) { +// e.printStackTrace(); +// } +// this.facePool.shutdownNow(); + closeSelf(); + // 保存断点信息 + setPointInfo(); return false; } } - try { - this.randomAccessFile.close(); - System.out.println("本地文件关闭"); - } catch (IOException e) { - e.printStackTrace(); - } - this.facePool.shutdownNow(); +// try { +// this.randomAccessFile.close(); +// System.out.println("本地文件关闭"); +// } catch (IOException e) { +// e.printStackTrace(); +// } +// this.facePool.shutdownNow(); + closeSelf(); + // 更新本地断点信息 + rmPointInfo(); return true; } @@ -224,7 +337,12 @@ public class UpLoadClientBasedFacePool { synchronized (randomAccessFile) { // RandomAccessFile randomAccessFile = new RandomAccessFile(localFilePath, "rw"); // 设置文件的读取起点 - randomAccessFile.seek(offset); + try{ + randomAccessFile.seek(offset); + }catch (IOException e){ + // 说明文件流已经关闭,则不继续执行 + return ; + } // 尝试读取数据 int readLen = randomAccessFile.read(content, 0, 7000); int jsonLen = StringByteLengthUtil.getByteLength(orderInfo.getJsonString()); @@ -296,41 +414,44 @@ public class UpLoadClientBasedFacePool { @Override public void onData(Interest interest, Data data){ - responseData.setResponseData(data.getContent().toString()); - JSONObject jsonObject = responseData.praseRequestData(); + if (!isClosed) { + responseData.setResponseData(data.getContent().toString()); + JSONObject jsonObject = responseData.praseRequestData(); - congestionWindow.inFlightDecrease(); - // 解析数据,是否成功上传 - Integer codeInteger = null; - try { - codeInteger = jsonObject.getInt("code"); - } catch (JSONException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - if (codeInteger == 200) { - recvCount.incrementAndGet(); - congestionWindow.cwndIncrease(); - System.out.println("第" + sliceNum + "片上传成功!"); - }else{ - failedSlice.add(sliceNum* MainApp.sliceSize); - System.out.println("第" + sliceNum + "片上传失败!"); - } - //拥塞标记返回值,无意义,大于0就表示拥塞,直接进行窗口减小操作即可 - if(data.getCongestionMark() > 0){ - System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&网络拥塞,滑动窗口减小,getCongestionMark:" + data.getCongestionMark()); - congestionWindow.cwndDecrease(); - }else{ - //如果没有检测到拥塞,则增加窗口 - congestionWindow.nIndataIncrease(); - } + congestionWindow.inFlightDecrease(); + // 解析数据,是否成功上传 + Integer codeInteger = null; + try { + codeInteger = jsonObject.getInt("code"); + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + if (codeInteger == 200) { + recvCount.incrementAndGet(); + congestionWindow.cwndIncrease(); + // 刷新断点 + refreshSuccessPoint(sliceNum); + System.out.println("第" + sliceNum + "片上传成功!"); + } else { + failedSlice.add(sliceNum * MainApp.sliceSize); + System.out.println("第" + sliceNum + "片上传失败!"); + } + //拥塞标记返回值,无意义,大于0就表示拥塞,直接进行窗口减小操作即可 + if (data.getCongestionMark() > 0) { + System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&网络拥塞,滑动窗口减小,getCongestionMark:" + data.getCongestionMark()); + congestionWindow.cwndDecrease(); + } else { + //如果没有检测到拥塞,则增加窗口 + congestionWindow.nIndataIncrease(); + } - if(timeOutNums.containsKey(sliceNum)){ - timeOutNums.remove(sliceNum); + if (timeOutNums.containsKey(sliceNum)) { + timeOutNums.remove(sliceNum); + } + + isFinished = true; } - - isFinished = true; - } public int callbackCount = 0 ; @@ -349,18 +470,20 @@ public class UpLoadClientBasedFacePool { @Override public void onTimeout(Interest interest){ - congestionWindow.inFlightDecrease(); - failedSlice.add(upLoadData.sliceNum* MainApp.sliceSize); - callbackCount ++ ; - System.out.println("Time out for interest " + interest.getName()); - upLoadData.isFinished = false; + if (!isClosed) { + congestionWindow.inFlightDecrease(); + failedSlice.add(upLoadData.sliceNum * MainApp.sliceSize); + callbackCount++; + System.out.println("Time out for interest " + interest.getName()); + upLoadData.isFinished = false; - // - if(timeOutNums.containsKey(upLoadData.sliceNum)){ - int value = timeOutNums.get(upLoadData.sliceNum) + 1; - timeOutNums.put(upLoadData.sliceNum,value); - }else{ - timeOutNums.put(upLoadData.sliceNum,1); + // + if (timeOutNums.containsKey(upLoadData.sliceNum)) { + int value = timeOutNums.get(upLoadData.sliceNum) + 1; + timeOutNums.put(upLoadData.sliceNum, value); + } else { + timeOutNums.put(upLoadData.sliceNum, 1); + } } } } @@ -376,18 +499,20 @@ public class UpLoadClientBasedFacePool { @Override public void onNetworkNack(Interest var1, NetworkNack var2){ - congestionWindow.inFlightDecrease(); - failedSlice.add(upLoadData.sliceNum* MainApp.sliceSize); - // - if(timeOutNums.containsKey(upLoadData.sliceNum)){ - int value = timeOutNums.get(upLoadData.sliceNum) + 1; - timeOutNums.put(upLoadData.sliceNum,value); - }else{ - timeOutNums.put(upLoadData.sliceNum,1); + if (!isClosed) { + congestionWindow.inFlightDecrease(); + failedSlice.add(upLoadData.sliceNum * MainApp.sliceSize); + // + if (timeOutNums.containsKey(upLoadData.sliceNum)) { + int value = timeOutNums.get(upLoadData.sliceNum) + 1; + timeOutNums.put(upLoadData.sliceNum, value); + } else { + timeOutNums.put(upLoadData.sliceNum, 1); + } + callbackCount++; + System.out.println("onNetworkNack " + var1.getName()); + upLoadData.isFinished = true; } - callbackCount ++ ; - System.out.println("onNetworkNack " + var1.getName()); - upLoadData.isFinished = true; } } diff --git a/src/main/java/cn/minoa/model/BPRInfo.java b/src/main/java/cn/minoa/model/BPRInfo.java new file mode 100644 index 0000000..58833ce --- /dev/null +++ b/src/main/java/cn/minoa/model/BPRInfo.java @@ -0,0 +1,50 @@ +package cn.minoa.model; +// 断点续传中,需要持久化到本地的文件参数 + +public class BPRInfo { + + // 文件唯一标识:上传中指的是哈希值,下载中指的是文件服务器URL + // 现在上传和下载的该数值全部定义为:纯文件名_文件长度 + private String fileId; + // 文件名称 + private String fileName; + // 文件位置:上传中指的是文件服务器位置,下载中指的是文件本地位置 + private String fileLocator; + // 断点续传位置 + private Long point; + + public BPRInfo(){ + } + + public String getFileId() { + return fileId; + } + + public void setFileId(String fileId) { + this.fileId = fileId; + } + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } + + public String getFileLocator() { + return fileLocator; + } + + public void setFileLocator(String fileLocator) { + this.fileLocator = fileLocator; + } + + public Long getPoint() { + return point; + } + + public void setPoint(Long point) { + this.point = point; + } +} diff --git a/src/main/java/cn/minoa/util/EncryptionUtil.java b/src/main/java/cn/minoa/util/EncryptionUtil.java index 7da9835..b3efe86 100644 --- a/src/main/java/cn/minoa/util/EncryptionUtil.java +++ b/src/main/java/cn/minoa/util/EncryptionUtil.java @@ -1,22 +1,45 @@ package cn.minoa.util; +//import org.apache.commons.codec.digest.DigestUtils; + import javax.crypto.*; import javax.crypto.spec.SecretKeySpec; -import java.io.UnsupportedEncodingException; +import java.io.FileInputStream; +import java.io.IOException; import java.math.BigInteger; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; import java.security.InvalidKeyException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; public class EncryptionUtil { + // 获取文件md5加密结果 +// public static String getFileHash(String path){ +// Long startTime = System.currentTimeMillis(); +// // File +//// String path="E:\\系统镜像\\ubuntu-18.04.3-desktop-amd64.iso"; +//// String path="E:\\系统镜像\\UltraISO.9.7.0.3476.exe"; +// String res=null; +// try { +// res= DigestUtils.md5Hex(new FileInputStream(path)); +// System.out.println("文件"+path+"加密结果:"+res); +// } catch (IOException e) { +// e.printStackTrace(); +// } +// Long endTime=System.currentTimeMillis(); +// System.out.println("文件"+path+"加密耗时:"+(endTime-startTime)+"ms"); +// return res; +// } public static String getMD5String(String str) { + str= URLEncoder.encode(str, StandardCharsets.UTF_8); try { // 生成一个MD5加密计算摘要 MessageDigest md = MessageDigest.getInstance("MD5"); // 计算md5函数 - md.update(str.getBytes("utf-8")); + md.update(str.getBytes(StandardCharsets.UTF_8)); // digest()最后确定返回md5 hash值,返回值为8位字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符 // BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值 //一个byte是八位二进制,也就是2位十六进制字符(2的8次方等于16的2次方) @@ -30,6 +53,7 @@ public class EncryptionUtil { } public static String encryptBasedAES(String content) { +// content= URLEncoder.encode(content, StandardCharsets.UTF_8); byte[] encrypt=encryptBasedAES(content,"123"); return ParseSystemUtil.parseByte2HexStr(encrypt); } @@ -46,18 +70,20 @@ public class EncryptionUtil { * @return 密文 */ public static byte[] encryptBasedAES(String content, String password) { +// content= URLEncoder.encode(content, StandardCharsets.UTF_8); +// password= URLEncoder.encode(password, StandardCharsets.UTF_8); try { KeyGenerator kgen = KeyGenerator.getInstance("AES");// 创建AES的Key生产者 // kgen.init(128, new SecureRandom(password.getBytes()));// 利用用户密码作为随机数初始化出 SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG"); - secureRandom.setSeed(password.getBytes("utf-8")); + secureRandom.setSeed(password.getBytes(StandardCharsets.UTF_8)); kgen.init(128, secureRandom); //加密没关系,SecureRandom是生成安全随机数序列,password.getBytes()是种子,只要种子相同,序列就一样,所以解密只要有password就行 SecretKey secretKey = kgen.generateKey();// 根据用户密码,生成一个密钥 byte[] enCodeFormat = secretKey.getEncoded();// 返回基本编码格式的密钥,如果此密钥不支持编码,则返回 SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");// 转换为AES专用密钥 Cipher cipher = Cipher.getInstance("AES");// 创建密码器 - byte[] byteContent = content.getBytes("utf-8"); + byte[] byteContent = content.getBytes(StandardCharsets.UTF_8); cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化为加密模式的密码器 byte[] result = cipher.doFinal(byteContent);// 加密 return result; @@ -65,8 +91,6 @@ public class EncryptionUtil { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { @@ -78,13 +102,11 @@ public class EncryptionUtil { } public static String decryptBasedAES(String hexStr) { +// hexStr= URLEncoder.encode(hexStr, StandardCharsets.UTF_8); byte[] byte2 = ParseSystemUtil.parseHexStr2Byte(hexStr); - try { - return new String(decryptBasedAES(byte2, "123")); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - return null; - } + String s=new String(decryptBasedAES(byte2, "123"),StandardCharsets.UTF_8); +// s=URLEncoder.encode(s,StandardCharsets.UTF_8); + return s; } // public static byte[] decryptBasedAES(byte[] content) { @@ -98,12 +120,13 @@ public class EncryptionUtil { * @param password 加密时的密码 * @return 明文 */ - public static byte[] decryptBasedAES(byte[] content, String password) throws UnsupportedEncodingException { + public static byte[] decryptBasedAES(byte[] content, String password){ +// password=URLEncoder.encode(password,StandardCharsets.UTF_8); try { KeyGenerator kgen = KeyGenerator.getInstance("AES");// 创建AES的Key生产者 // kgen.init(128, new SecureRandom(password.getBytes())); SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG"); - secureRandom.setSeed(password.getBytes("utf-8")); + secureRandom.setSeed(password.getBytes(StandardCharsets.UTF_8)); kgen.init(128, secureRandom); SecretKey secretKey = kgen.generateKey();// 根据用户密码,生成一个密钥 byte[] enCodeFormat = secretKey.getEncoded();// 返回基本编码格式的密钥 diff --git a/src/main/java/cn/minoa/util/FileBPRUtil.java b/src/main/java/cn/minoa/util/FileBPRUtil.java new file mode 100644 index 0000000..58ac426 --- /dev/null +++ b/src/main/java/cn/minoa/util/FileBPRUtil.java @@ -0,0 +1,220 @@ +package cn.minoa.util; + +import cn.minoa.model.BPRInfo; + +import java.io.*; +import java.nio.charset.StandardCharsets; +import java.util.Properties; + +// 文件断点续传支持类 +// 功能:存储和移除传输失败的文件信息 +public class FileBPRUtil { + + // 判断某md5哈希值是否在本地存储条目中 + public static boolean isHaveUploadBreakPointInfo(String hashString) { + // 加密 + hashString= EncryptionUtil.encryptBasedAES(hashString); + InputStream inputStream = null; + try { + //如果 classPath 不存在,则获取的输入流会为 null + inputStream = new BufferedInputStream(new FileInputStream("." + File.separator + "ndn" + File.separator + "FileBPRenewal.properties")); + if (inputStream == null) { + System.out.println("没有找到断点续传配置文件..."); + return false; + } + BufferedReader bf = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8)); + Properties settingProperties = new Properties(); + settingProperties.load(bf); + String filename=settingProperties.getProperty("fileName-"+hashString); + System.out.println(hashString+" : "+filename); + if(filename==null){ + return false; + }else{ + System.out.println("本地存在该文件的断点信息:"+hashString); + return true; + } + } catch (IOException e) { +// e.printStackTrace(); + return false; + } finally { + //关闭输入流 + if (inputStream != null) { + try { + inputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } + +// public static boolean isHaveDownloadBreakPointInfo(String fileUrlString) { +// return isHaveUploadBreakPointInfo(fileUrlString); +// } + + + // 存储上传文件断点信息到本地 + public static void setUploadBreakPointInfo(String hashString, + String pureFileName, + String serverPath, + Long point){ + // 加密 + hashString= EncryptionUtil.encryptBasedAES(hashString); + pureFileName= EncryptionUtil.encryptBasedAES(pureFileName); + serverPath= EncryptionUtil.encryptBasedAES(serverPath); + String pointString= EncryptionUtil.encryptBasedAES(point.toString()); + InputStream inputStream = null; + OutputStream outputStream=null; + try { + //如果 classPath 不存在,则获取的输入流会为 null + inputStream=new BufferedInputStream(new FileInputStream("."+ File.separator+"ndn"+File.separator+"FileBPRenewal.properties")); + if (inputStream == null) { + System.out.println("没有找到断点续传配置文件..."); + } + BufferedReader bf = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8)); + Properties settingProperties = new Properties(); + settingProperties.load(bf); + settingProperties.setProperty("fileName-"+hashString, pureFileName); + settingProperties.setProperty("fileServerPath-"+hashString,serverPath); + settingProperties.setProperty("filePoint-"+hashString, pointString); + outputStream=new BufferedOutputStream(new FileOutputStream("."+ File.separator+"ndn"+File.separator+"FileBPRenewal.properties")); + BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(outputStream,StandardCharsets.UTF_8)); + settingProperties.store(bw,"commit changes"); + } catch (IOException e) { + e.printStackTrace(); + }finally{ + //关闭输入流 + if (inputStream != null) { + try { + inputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + //关闭输出流 + if (outputStream != null) { + try { + outputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } + + // 移除上传文件的断点信息 + public static void deleteUploadBreakPointInfo(String hashString){ + // 加密 + hashString= EncryptionUtil.encryptBasedAES(hashString); + InputStream inputStream = null; + OutputStream outputStream=null; + try { + //如果 classPath 不存在,则获取的输入流会为 null + inputStream=new BufferedInputStream(new FileInputStream("."+ File.separator+"ndn"+File.separator+"FileBPRenewal.properties")); + if (inputStream == null) { + System.out.println("没有找到断点续传配置文件..."); + } + BufferedReader bf = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8)); + Properties settingProperties = new Properties(); + settingProperties.load(bf); + settingProperties.remove("fileName-"+hashString); + settingProperties.remove("fileServerPath-"+hashString); + settingProperties.remove("filePoint-"+hashString); + outputStream=new BufferedOutputStream(new FileOutputStream("."+ File.separator+"ndn"+File.separator+"FileBPRenewal.properties")); + BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(outputStream,StandardCharsets.UTF_8)); + settingProperties.store(bw,"commit changes"); + } catch (IOException e) { + e.printStackTrace(); + }finally{ + //关闭输入流 + if (inputStream != null) { + try { + inputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + //关闭输出流 + if (outputStream != null) { + try { + outputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } + +// public static void setDownloadBreakPointInfo(String fileUrlString, +// String pureFileName, +// String localPath, +// Long point){ +// setUploadBreakPointInfo(fileUrlString,pureFileName,localPath,point); +// } +// +// public static void deleteDownloadBreakPointInfo(String fileUrlString){ +// deleteUploadBreakPointInfo(fileUrlString); +// } + + // 取出上传文件断点信息到本地 + public static BPRInfo getUploadBreakPointInfo(String hashString) { + // 加密 + hashString= EncryptionUtil.encryptBasedAES(hashString); + InputStream inputStream = null; + try { + //如果 classPath 不存在,则获取的输入流会为 null + inputStream = new BufferedInputStream(new FileInputStream("." + File.separator + "ndn" + File.separator + "FileBPRenewal.properties")); + if (inputStream == null) { + System.out.println("没有找到断点续传配置文件..."); + } + BufferedReader bf = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8)); + Properties settingProperties = new Properties(); + settingProperties.load(bf); + BPRInfo bprInfo=new BPRInfo(); + bprInfo.setFileId(hashString); + bprInfo.setFileName(EncryptionUtil.decryptBasedAES(settingProperties.getProperty("fileName-"+hashString))); + bprInfo.setFileLocator(EncryptionUtil.decryptBasedAES(settingProperties.getProperty("fileServerPath-"+hashString))); + bprInfo.setPoint(Long.parseLong(EncryptionUtil.decryptBasedAES(settingProperties.getProperty("filePoint-"+hashString)))); + System.out.println("util-文件名:"+bprInfo.getFileName()); + System.out.println("util-文件断点:"+bprInfo.getPoint()); + System.out.println("util-文件路径:"+bprInfo.getFileLocator()); + if((bprInfo.getFileName()==null)||(bprInfo.getPoint()==null)||(bprInfo.getFileLocator()==null)){ + return null; + } + return bprInfo; + } catch (IOException e) { + e.printStackTrace(); + } finally { + //关闭输入流 + if (inputStream != null) { + try { + inputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return null; + } + +// public static BPRInfo getDownloadBreakPointInfo(String fileUrlString) { +// return getUploadBreakPointInfo(fileUrlString); +// } + +} + + +//1. 上传文件 +// 1.1 如果上传成功,且该次上传是续传,则移除该文件哈希值对应的本地存储条目; +// 1.2 如果上传失败,则将文件断点信息存到本地:md5哈希值、纯文件名、服务器路径、断点 +// 1.3 每次上传文件,都要计算一下md5哈希值,然后查表,看本地有没有这个哈希值。 +// 如果有,就取文件名、要传的服务器路径,对比一下,全部都对的上,就从断点位置继续传该文件;如果没该哈希值,或文件名、路径不一致,则从0开始上传。 +// +//2. 下载文件 +// 2.1 如果下载成功,且该次下载是续传,则移除该次下载的文件对应的服务器url所对应的本地存储条目; +// 2.2 如果下载失败,则将文件断点信息保存到本地:文件对应的服务器url(如:/a/b.txt)、纯文件名、本地目录、断点 +// 2.3 每次下载文件,都查看要下载的文件的服务器url是否在本地存储中。如果在,就取纯文件名、本地目录对比一下,如果全部都对的上,就从断点位置继续传该文件;如果没该服务器url,或文件名、路径不一致,则从0开始下载。 +//3. 问题: +// 1. 由于上述断点全部存储在客户端,那么对于电脑突然死机或用户直接关闭客户端的情况,是无法将断点信息保存到本地的,也就无法续传; +// 2. 上述下载中,所谓文件服务器URL,并不是文件唯一标识,如果出现文件错判,续传之后的文件将可能是两个不同文件的结合体。 + diff --git a/src/main/java/cn/minoa/util/GenerateSettingFiles.java b/src/main/java/cn/minoa/util/GenerateSettingFiles.java new file mode 100644 index 0000000..37893e7 --- /dev/null +++ b/src/main/java/cn/minoa/util/GenerateSettingFiles.java @@ -0,0 +1,144 @@ +package cn.minoa.util; +// 生成配置文件 + +import java.io.*; +import java.nio.charset.StandardCharsets; +import java.util.Properties; + +public class GenerateSettingFiles { + + public static void generateInitFiles(){ + generateNDNDir(); + generateSettingFile(); + generateBPRFile(); + generateNDNBlockFile(); + } + + public static void generateNDNDir(){ + String path="." + File.separator + "ndn"; + File file=new File(path); + if(!file.exists()&&!file.isDirectory()){ + file.mkdir(); + System.out.println("ndn目录创建成功"); + }else{ + System.out.println("ndn目录已经存在"); + } + } + + public static void generateNDNBlockFile() { + String path = "." + File.separator + "ndn" + File.separator +"BlockSuccessUsers.properties"; + generateNDNBlockFile(path); + } + + public static void generateNDNBlockFile(String path) { + File file = new File(path); + // 创建配置文件 + if (!file.exists()) { + try { + file.createNewFile(); + System.out.println("区块链注册信息文件创建成功"); + } catch (IOException e) { + System.out.println("区块链注册信息文件创建失败:" + e.getMessage()); + } + } else { + System.out.println(path + "区块链注册信息文件已经存在"); + } + } + + public static void generateBPRFile() { + String path = "." + File.separator + "ndn" + File.separator +"FileBPRenewal.properties"; + generateBPRFiles(path); + } + + public static void generateBPRFiles(String path) { + File file = new File(path); + // 创建配置文件 + if (!file.exists()) { + try { + file.createNewFile(); + System.out.println("断点信息记录文件创建成功"); + } catch (IOException e) { + System.out.println("断点信息记录文件创建失败:" + e.getMessage()); + } + } else { + System.out.println(path + "断点信息记录文件已经存在"); + } + } + + public static void generateSettingFile() { + String path = "." + File.separator + "ndn" + File.separator + "settings.properties"; + generateSettingFile(path); + } + + public static void generateSettingFile(String path) { + File file = new File(path); + boolean isNew=false; //标志配置文件是否是新建的 + // 创建配置文件 + if (!file.exists()) { + isNew=true; + try { + file.createNewFile(); + System.out.println("setting配置文件创建成功"); + } catch (IOException e) { + System.out.println("setting配置文件创建失败:" + e.getMessage()); + } + } else { + isNew=false; + System.out.println(path + "配置文件已经存在"); + } + // 如果是新建配置文件,则写入配置文件的默认内容 + if(isNew) { + InputStream inputStream = null; + OutputStream outputStream = null; + try { + //如果 classPath 不存在,则获取的输入流会为 null + inputStream = new BufferedInputStream(new FileInputStream(path)); + if (inputStream == null) { + System.out.println("没有找到配置文件..."); + } + // 解决中文乱码问题 + BufferedReader bf = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8)); + Properties settingProperties = new Properties(); + settingProperties.load(bf); + settingProperties.setProperty("ServerIPAddress", "116.77.74.139"); + settingProperties.setProperty("ServerPortAddress", "6363"); + settingProperties.setProperty("ndnBlockChainIPAddress", "116.77.74.139"); + settingProperties.setProperty("ndnBlockChainPortAddress", "9001"); + settingProperties.setProperty("DataPackagePrefix", "/ndn/edu/pkusz/OA"); + settingProperties.setProperty("ThreadNumberForFileTransfer", "5"); + settingProperties.setProperty("KeyName", "/default"); + settingProperties.setProperty("LoginStatus", "false"); + settingProperties.setProperty("loginUserName", "default"); + settingProperties.setProperty("loginPassWord", "default"); + outputStream = new BufferedOutputStream(new FileOutputStream(path)); + // 解决中文乱码问题 + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(outputStream, StandardCharsets.UTF_8)); + settingProperties.store(bw, "初始化配置文件"); + System.out.println("setting配置文件内容初始化成功"); + } catch (IOException e) { +// e.printStackTrace(); + System.out.println("setting配置文件内容填充失败" + e.getMessage()); + } finally { + //关闭输入流 + if (inputStream != null) { + try { + inputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + //关闭输出流 + if (outputStream != null) { + try { + outputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + }else{ + System.out.println(path+"配置文件内容保持不变"); + } + } + +} diff --git a/src/main/java/cn/minoa/util/KeyStorageUtil.java b/src/main/java/cn/minoa/util/KeyStorageUtil.java index 64d5ed8..db6f076 100644 --- a/src/main/java/cn/minoa/util/KeyStorageUtil.java +++ b/src/main/java/cn/minoa/util/KeyStorageUtil.java @@ -3,6 +3,7 @@ package cn.minoa.util; import cn.minoa.MainApp; import java.io.*; +import java.nio.charset.StandardCharsets; import java.util.Properties; public class KeyStorageUtil { @@ -17,11 +18,13 @@ public class KeyStorageUtil { if (inputStream == null) { System.out.println("没有找到配置文件..."); } + BufferedReader bf = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8)); Properties settingProperties = new Properties(); - settingProperties.load(inputStream); + settingProperties.load(bf); settingProperties.setProperty("KeyName", keyName); outputStream=new BufferedOutputStream(new FileOutputStream(MainApp.getClientPath()+ File.separator+"ndn"+File.separator+"settings.properties")); - settingProperties.store(outputStream,"修改配置文件"); + BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(outputStream,StandardCharsets.UTF_8)); + settingProperties.store(bw,"修改配置文件"); } catch (IOException e) { e.printStackTrace(); }finally{ @@ -49,13 +52,15 @@ public class KeyStorageUtil { InputStream inputStream = null; try { //如果 classPath 不存在,则获取的输入流会为 null - inputStream = new BufferedInputStream(new FileInputStream(MainApp.getClientPath() + File.separator + "ndn" + File.separator + "settings.properties")); + inputStream = new BufferedInputStream(new FileInputStream("." + File.separator + "ndn" + File.separator + + "settings.properties")); // inputStream = MainApp.class.getClassLoader().getResourceAsStream("/ndn/settings.properties"); if (inputStream == null) { System.out.println("没有找到配置文件..."); } + BufferedReader bf = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8)); Properties settingProperties = new Properties(); - settingProperties.load(inputStream); + settingProperties.load(bf); String keyName = settingProperties.getProperty("KeyName"); return keyName; } catch (IOException e) { diff --git a/src/main/java/cn/minoa/util/LoggerUtil.java b/src/main/java/cn/minoa/util/LoggerUtil.java index 4be32aa..f4e8f9d 100644 --- a/src/main/java/cn/minoa/util/LoggerUtil.java +++ b/src/main/java/cn/minoa/util/LoggerUtil.java @@ -9,7 +9,8 @@ public class LoggerUtil { // 将文件名、文件操作、传输耗时等信息写入日志. public static void insertFileAction(String filename, String fileaction, String usedtime) { try { - File file = new File("./ndn/log.txt"); + File file = new File("." + File.separator + "ndn" + + File.separator +"log.txt"); FileOutputStream fos = null; if (!file.exists()) { file.createNewFile();//如果文件不存在,就创建该文件 diff --git a/src/main/java/cn/minoa/util/RegisterUtil.java b/src/main/java/cn/minoa/util/RegisterUtil.java new file mode 100644 index 0000000..98712bd --- /dev/null +++ b/src/main/java/cn/minoa/util/RegisterUtil.java @@ -0,0 +1,116 @@ +package cn.minoa.util; + +import java.io.*; +import java.nio.charset.StandardCharsets; +import java.util.Properties; + +public class RegisterUtil { + // 用户记录:通过了区块链注册,但是没有通过后台注册的用户前缀 + + public static boolean isAccessedBlockUser(String prefix) { + // 加密 + String hashString= EncryptionUtil.encryptBasedAES(prefix); + InputStream inputStream = null; + try { + //如果 classPath 不存在,则获取的输入流会为 null + inputStream = new BufferedInputStream(new FileInputStream("." + File.separator + "ndn" + File.separator + "BlockSuccessUsers.properties")); + BufferedReader bf = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8)); + Properties settingProperties = new Properties(); + settingProperties.load(bf); + String filename=settingProperties.getProperty(hashString); + System.out.println(hashString+" : "+filename); + if(filename==null){ + return false; + }else{ + System.out.println("本地存在该文件的断点信息:"+hashString); + return true; + } + } catch (IOException e) { +// e.printStackTrace(); + return false; + } finally { + //关闭输入流 + if (inputStream != null) { + try { + inputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } + + public static void setAccessedBlockUser(String prefix){ + // 加密 + String hashString= EncryptionUtil.encryptBasedAES(prefix); + InputStream inputStream = null; + OutputStream outputStream=null; + try { + //如果 classPath 不存在,则获取的输入流会为 null + inputStream=new BufferedInputStream(new FileInputStream("."+ File.separator+"ndn"+File.separator+"BlockSuccessUsers.properties")); + BufferedReader bf = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8)); + Properties settingProperties = new Properties(); + settingProperties.load(bf); + settingProperties.setProperty(hashString, hashString); + outputStream=new BufferedOutputStream(new FileOutputStream("."+ File.separator+"ndn"+File.separator+"BlockSuccessUsers.properties")); + BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(outputStream,StandardCharsets.UTF_8)); + settingProperties.store(bw,"commit changes: add a prefix"); + } catch (IOException e) { + e.printStackTrace(); + }finally{ + //关闭输入流 + if (inputStream != null) { + try { + inputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + //关闭输出流 + if (outputStream != null) { + try { + outputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } + + public static void deleteAccessedBlockUser(String prefix){ + // 加密 + String hashString= EncryptionUtil.encryptBasedAES(prefix); + InputStream inputStream = null; + OutputStream outputStream=null; + try { + //如果 classPath 不存在,则获取的输入流会为 null + inputStream=new BufferedInputStream(new FileInputStream("."+ File.separator+"ndn"+File.separator+"BlockSuccessUsers.properties")); + BufferedReader bf = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8)); + Properties settingProperties = new Properties(); + settingProperties.load(bf); + settingProperties.remove(hashString); + outputStream=new BufferedOutputStream(new FileOutputStream("."+ File.separator+"ndn"+File.separator+"BlockSuccessUsers.properties")); + BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(outputStream,StandardCharsets.UTF_8)); + settingProperties.store(bw,"commit changes: delete a prefix"); + } catch (IOException e) { + e.printStackTrace(); + }finally{ + //关闭输入流 + if (inputStream != null) { + try { + inputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + //关闭输出流 + if (outputStream != null) { + try { + outputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } +} diff --git a/src/main/java/cn/minoa/view/home/DealSingleReimbursementController.java b/src/main/java/cn/minoa/view/home/DealSingleReimbursementController.java index c872ab3..6e6c6c3 100644 --- a/src/main/java/cn/minoa/view/home/DealSingleReimbursementController.java +++ b/src/main/java/cn/minoa/view/home/DealSingleReimbursementController.java @@ -1,10 +1,9 @@ package cn.minoa.view.home; import cn.minoa.MainApp; -import cn.minoa.dataRequestInterface.DownLoadClientBasedFacePool; +import cn.minoa.dataRequestInterface.DownLoadClientBPRenewal; import cn.minoa.dataRequestInterface.OrderInfo; import cn.minoa.dataRequestInterface.ResponseData; -import cn.minoa.model.Email; import cn.minoa.model.Reimbursement; import javafx.fxml.FXML; import javafx.scene.control.Alert; @@ -14,14 +13,11 @@ import javafx.scene.layout.Pane; import javafx.scene.text.Text; import javafx.stage.DirectoryChooser; import javafx.stage.Stage; -import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.io.File; import java.io.IOException; -import java.util.LinkedList; -import java.util.List; public class DealSingleReimbursementController { private MainApp mainApp; @@ -126,7 +122,7 @@ public class DealSingleReimbursementController { sliceNum++; } Long startTime = System.currentTimeMillis(); - DownLoadClientBasedFacePool downLoadClient = new DownLoadClientBasedFacePool(pathfilename, + DownLoadClientBPRenewal downLoadClient = new DownLoadClientBPRenewal(pathfilename, localDirString,sliceNum,mainApp.threadNumberForFileTransfer); // 下载文件 boolean res = downLoadClient.downloadData(); diff --git a/src/main/java/cn/minoa/view/home/SingleReimbursementDetailsController.java b/src/main/java/cn/minoa/view/home/SingleReimbursementDetailsController.java index e722546..82ad4ce 100644 --- a/src/main/java/cn/minoa/view/home/SingleReimbursementDetailsController.java +++ b/src/main/java/cn/minoa/view/home/SingleReimbursementDetailsController.java @@ -1,9 +1,8 @@ package cn.minoa.view.home; import cn.minoa.MainApp; -import cn.minoa.dataRequestInterface.DownLoadClientBasedFacePool; +import cn.minoa.dataRequestInterface.DownLoadClientBPRenewal; import cn.minoa.model.Reimbursement; -import cn.minoa.view.login.LoginOverviewController; import javafx.fxml.FXML; import javafx.scene.control.Alert; import javafx.scene.control.ListView; @@ -115,7 +114,7 @@ public class SingleReimbursementDetailsController { sliceNum++; } Long startTime = System.currentTimeMillis(); - DownLoadClientBasedFacePool downLoadClient = new DownLoadClientBasedFacePool(pathfilename, + DownLoadClientBPRenewal downLoadClient = new DownLoadClientBPRenewal(pathfilename, localDirString,sliceNum,mainApp.threadNumberForFileTransfer); // 下载文件 boolean res = downLoadClient.downloadData(); diff --git a/src/main/java/cn/minoa/view/login/KeepLoginStatus.java b/src/main/java/cn/minoa/view/login/KeepLoginStatus.java index 1bd22b0..472f26f 100644 --- a/src/main/java/cn/minoa/view/login/KeepLoginStatus.java +++ b/src/main/java/cn/minoa/view/login/KeepLoginStatus.java @@ -1,10 +1,12 @@ package cn.minoa.view.login; +import cn.minoa.Main; import cn.minoa.MainApp; import cn.minoa.model.Loginer; import cn.minoa.util.EncryptionUtil; import java.io.*; +import java.nio.charset.StandardCharsets; import java.util.Properties; // 维持长登录状态 @@ -19,15 +21,17 @@ public class KeepLoginStatus { if (inputStream == null) { System.out.println("没有找到配置文件..."); } + BufferedReader bf = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8)); Properties settingProperties = new Properties(); - settingProperties.load(inputStream); + settingProperties.load(bf); if(flag==true){ settingProperties.setProperty("LoginStatus","true"); }else{ settingProperties.setProperty("LoginStatus","false"); } outputStream=new BufferedOutputStream(new FileOutputStream(MainApp.getClientPath()+ File.separator+"ndn"+File.separator+"settings.properties")); - settingProperties.store(outputStream,"修改配置文件"); + BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(outputStream,StandardCharsets.UTF_8)); + settingProperties.store(bw,"修改配置文件"); } catch (IOException e) { e.printStackTrace(); }finally{ @@ -59,12 +63,14 @@ public class KeepLoginStatus { if (inputStream == null) { System.out.println("没有找到配置文件..."); } + BufferedReader bf = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8)); Properties settingProperties = new Properties(); - settingProperties.load(inputStream); - settingProperties.setProperty("loginUserName", EncryptionUtil.encryptBasedAES(loginer.getUserName())); - settingProperties.setProperty("loginPassWord", EncryptionUtil.encryptBasedAES(loginer.getPassWord())); + settingProperties.load(bf); + settingProperties.setProperty("loginUserName",EncryptionUtil.encryptBasedAES(loginer.getUserName())); + settingProperties.setProperty("loginPassWord",EncryptionUtil.encryptBasedAES(loginer.getPassWord())); outputStream=new BufferedOutputStream(new FileOutputStream(MainApp.getClientPath()+ File.separator+"ndn"+File.separator+"settings.properties")); - settingProperties.store(outputStream,"修改配置文件"); + BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(outputStream,StandardCharsets.UTF_8)); + settingProperties.store(bw,"修改配置文件"); } catch (IOException e) { e.printStackTrace(); }finally{ @@ -97,8 +103,9 @@ public class KeepLoginStatus { if (inputStream == null) { System.out.println("没有找到配置文件..."); } + BufferedReader bf = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8)); Properties settingProperties = new Properties(); - settingProperties.load(inputStream); + settingProperties.load(bf); String username = EncryptionUtil.decryptBasedAES(settingProperties.getProperty("loginUserName")); String password = EncryptionUtil.decryptBasedAES(settingProperties.getProperty("loginPassWord")); // System.out.println("username: " + username); @@ -129,8 +136,9 @@ public class KeepLoginStatus { if (inputStream == null) { System.out.println("没有找到配置文件..."); } + BufferedReader bf = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8)); Properties settingProperties = new Properties(); - settingProperties.load(inputStream); + settingProperties.load(bf); String LoginStatus = settingProperties.getProperty("LoginStatus"); if(LoginStatus.equals("true")){ return true; diff --git a/src/main/java/cn/minoa/view/login/LoginOverviewController.java b/src/main/java/cn/minoa/view/login/LoginOverviewController.java index 1e58c71..6548ad5 100644 --- a/src/main/java/cn/minoa/view/login/LoginOverviewController.java +++ b/src/main/java/cn/minoa/view/login/LoginOverviewController.java @@ -453,7 +453,7 @@ public class LoginOverviewController { // 获取用户列表信息 ResponseData responseData = mainApp.minoaDataAPI.dataCacheQueue.getResponseDataBySeq(seqLong); JSONObject jsonObject = responseData.praseRequestData(); -// System.out.println("getUsers-JSON: "+jsonObject.toString()); + System.out.println("getUsers-JSON: "+jsonObject.toString()); Integer codeInteger = null; try { codeInteger = jsonObject.getInt("code"); @@ -1004,7 +1004,7 @@ public class LoginOverviewController { sliceNum++; } Long startTime = System.currentTimeMillis(); - DownLoadClientBasedFacePool downLoadClient = new DownLoadClientBasedFacePool(filename, + DownLoadClientBPRenewal downLoadClient = new DownLoadClientBPRenewal(filename, localDir,sliceNum,mainApp.threadNumberForFileTransfer); // 下载文件 boolean res = downLoadClient.downloadData(); diff --git a/src/main/java/cn/minoa/view/login/NDNBlockChainConnectClient.java b/src/main/java/cn/minoa/view/login/NDNBlockChainConnectClient.java index 39ca0a0..7ef0de7 100644 --- a/src/main/java/cn/minoa/view/login/NDNBlockChainConnectClient.java +++ b/src/main/java/cn/minoa/view/login/NDNBlockChainConnectClient.java @@ -2,11 +2,27 @@ package cn.minoa.view.login; // 与区块链建立TCP连接,发送注册请求 import cn.minoa.MainApp; +import cn.minoa.dataRequestInterface.KeyManager; +import net.named_data.jndn.Name; +import net.named_data.jndn.Signature; +import net.named_data.jndn.encoding.der.DerDecodingException; +import net.named_data.jndn.security.KeyChain; +import net.named_data.jndn.security.SecurityException; +import net.named_data.jndn.security.SigningInfo; +import net.named_data.jndn.security.pib.PibImpl; +import net.named_data.jndn.security.tpm.TpmBackEnd; +import net.named_data.jndn.security.v2.CertificateV2; +import net.named_data.jndn.util.Blob; +import net.named_data.jndn.util.Common; import org.json.JSONException; import org.json.JSONObject; import java.io.*; import java.net.Socket; +import java.nio.ByteBuffer; +import java.nio.charset.StandardCharsets; +import java.security.Security; +import java.security.cert.Certificate; public class NDNBlockChainConnectClient { @@ -14,20 +30,77 @@ public class NDNBlockChainConnectClient { private Integer NDNBlockChainPortAddress; public NDNBlockChainConnectClient(){ -// this.NDNBlockChainIPAddress="116.77.74.144"; -// this.NDNBlockChainIPAddress="121.15.171.86"; -// this.NDNBlockChainPortAddress=8010; this.NDNBlockChainIPAddress= MainApp.NDNBlockChainIPAddress; - System.out.println("区块链IP:"+ MainApp.NDNBlockChainIPAddress); - this.NDNBlockChainPortAddress= MainApp.NDNBlockChainPortAddress; - System.out.println("区块链Port:"+ MainApp.NDNBlockChainPortAddress); + System.out.println("区块链IP:"+MainApp.NDNBlockChainIPAddress); + this.NDNBlockChainPortAddress=MainApp.NDNBlockChainPortAddress; + System.out.println("区块链Port:"+MainApp.NDNBlockChainPortAddress); } - public NDNBlockChainConnectClient(String ipAddress, Integer portAddress){ + public NDNBlockChainConnectClient(String ipAddress,Integer portAddress){ this.NDNBlockChainIPAddress= ipAddress; this.NDNBlockChainPortAddress=portAddress; } + // 将已在区块链后台注册成功的用户注销掉 + public String deleteUser(String username,String sig){ + String prefix="/"+username; + // 获取注册数组 + byte[] registerByte=getBlockChainDeleteBuffer(prefix,sig); + System.out.println("delete length: "+registerByte.length); + // 通过TCP连接区块链后台 + Socket blockchainClient; + try { + blockchainClient=new Socket(NDNBlockChainIPAddress,NDNBlockChainPortAddress); + } catch (IOException e) { + e.printStackTrace(); + System.out.println("连接不可达:"+NDNBlockChainIPAddress+":"+NDNBlockChainPortAddress); + return e.getMessage(); + } + System.out.println("已成功建立TCP连接:"+NDNBlockChainIPAddress+":"+NDNBlockChainPortAddress + +"; 远程主机地址:"+blockchainClient.getRemoteSocketAddress()); + try { + OutputStream outToServer = blockchainClient.getOutputStream(); + DataOutputStream out = new DataOutputStream(outToServer); + + out.write(registerByte); + InputStream inFromServer = blockchainClient.getInputStream(); + DataInputStream in = new DataInputStream(inFromServer); + System.out.println("正在等待服务器响应..."); + byte[] res = new byte[4]; + in.read(res); + int resSize = Bytes2Int_LE(res); + System.out.println("返回值长度为:"+ resSize); + res = new byte[resSize]; + in.read(res); + System.out.println("返回值内容为:" + new String(res, StandardCharsets.UTF_8)); + System.out.println("服务器响应: " ); + blockchainClient.close(); + System.out.println("已关闭此次TCP连接:"+NDNBlockChainIPAddress+":"+NDNBlockChainPortAddress); +// System.out.println("服务器响应: " ); + // 解析返回来的数据,如果是200,就返回true + try { + String resString=new String(res,StandardCharsets.UTF_8); + System.out.println("resString: "+resString); + JSONObject resObject=new JSONObject(resString); + int resCode=resObject.getInt("StatusCode"); + String message=resObject.getString("Message"); + if(resCode==200){ + System.out.println("区块链销户成功:"+username); + return "true"; + }else{ + return message; + } + } catch (JSONException e) { + e.printStackTrace(); + return e.getMessage(); + } + } catch (IOException e) { + e.printStackTrace(); + System.out.println("销户时数据交换出错:"+NDNBlockChainIPAddress+":"+NDNBlockChainPortAddress); + return e.getMessage(); + } + } + // 添加白名单 public String addWhiteUser(String phone){ // 获取注册数组 @@ -117,14 +190,14 @@ public class NDNBlockChainConnectClient { System.out.println("返回值长度为:"+ resSize); res = new byte[resSize]; in.read(res); - System.out.println("返回值内容为:" + new String(res)); + System.out.println("返回值内容为:" + new String(res, StandardCharsets.UTF_8)); System.out.println("服务器响应: " ); blockchainClient.close(); System.out.println("已关闭此次TCP连接:"+NDNBlockChainIPAddress+":"+NDNBlockChainPortAddress); // System.out.println("服务器响应: " ); // 解析返回来的数据,如果是200,就返回true try { - String resString=new String(res); + String resString=new String(res,StandardCharsets.UTF_8); System.out.println("resString: "+resString); JSONObject resObject=new JSONObject(resString); int resCode=resObject.getInt("StatusCode"); @@ -150,19 +223,15 @@ public class NDNBlockChainConnectClient { private byte[] getBlockChainRegisterBuffer(String username,String phone, String pubkey) { String registerString=getBlockChainRegisterJsonString(username,phone, pubkey); System.out.println("json: "+registerString); - int jsonLen = registerString.getBytes().length; + int jsonLen = registerString.getBytes(StandardCharsets.UTF_8).length; System.out.println("json len: "+jsonLen); byte[] registerByte=new byte[jsonLen+4]; // System.arraycopy(intToBytesLittle(jsonLen),0, // registerByte,0,4); System.arraycopy(intToBytesLittle(jsonLen),0, registerByte,0,4); - try { - System.arraycopy(registerString.getBytes("utf-8"), - 0,registerByte,4,jsonLen); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } + System.arraycopy(registerString.getBytes(StandardCharsets.UTF_8), + 0,registerByte,4,jsonLen); return registerByte; } @@ -172,16 +241,23 @@ public class NDNBlockChainConnectClient { int jsonLen = registerString.getBytes().length; System.out.println("json len: "+jsonLen); byte[] registerByte=new byte[jsonLen+4]; -// System.arraycopy(intToBytesLittle(jsonLen),0, -// registerByte,0,4); System.arraycopy(intToBytesLittle(jsonLen),0, registerByte,0,4); - try { - System.arraycopy(registerString.getBytes("utf-8"), - 0,registerByte,4,jsonLen); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } + System.arraycopy(registerString.getBytes(StandardCharsets.UTF_8), + 0,registerByte,4,jsonLen); + return registerByte; + } + + private byte[] getBlockChainDeleteBuffer(String prefix,String sig) { + String registerString=getBlockChainDeleteUserJsonString(prefix,sig); + System.out.println("json: "+registerString); + int jsonLen = registerString.getBytes().length; + System.out.println("json len: "+jsonLen); + byte[] registerByte=new byte[jsonLen+4]; + System.arraycopy(intToBytesLittle(jsonLen),0, + registerByte,0,4); + System.arraycopy(registerString.getBytes(StandardCharsets.UTF_8), + 0,registerByte,4,jsonLen); return registerByte; } @@ -231,7 +307,49 @@ public class NDNBlockChainConnectClient { return iRst; } - // 从前端界面获得登录数据并转换成json格式 + private String getBlockChainDeleteUserJsonString(String prefix,String sig) { + JSONObject jsonObject = new JSONObject(); + try { + jsonObject.put("Type", "user-act"); + jsonObject.put("Command", "Destroy"); + jsonObject.put("Prefix",prefix); + jsonObject.put("Timestamp",""); + jsonObject.put("Sig",sig); + } catch (Exception e) { + System.out.println("exception: " + e.getMessage()); + } + return jsonObject.toString(); + } + + public static String signBuf(String prefix, CertificateV2 certificateV2){ + // 构建msg + JSONObject jsonObject = new JSONObject(); + try { + jsonObject.put("Type", "user-act"); + jsonObject.put("Command", "Destroy"); + jsonObject.put("Prefix",prefix); + jsonObject.put("Timestamp",""); + } catch (Exception e) { + System.out.println("exception: " + e.getMessage()); + } + String msg=jsonObject.toString(); + ByteBuffer byteBuffer=ByteBuffer.wrap(msg.getBytes(StandardCharsets.UTF_8));// 这句是C++没有的 + try { + SigningInfo signingInfo = new SigningInfo(); + signingInfo.setSigningIdentity(certificateV2.getIdentity()); + Blob blob= KeyManager.INSTANCE.getKeyChain().sign(byteBuffer,signingInfo); +// String sig=blob.toHex(); + String sig=Common.base64Encode(blob.getImmutableArray(), false); +// String sig= Common.base64Encode(signature.getSignature().getImmutableArray()); +// String sig1=signature.getSignature().toHex(); + System.out.println("sig: "+sig); + return sig; + } catch (PibImpl.Error | KeyChain.Error | TpmBackEnd.Error e) { + e.printStackTrace(); + return ""; + } + } + private String getBlockChainWhiteUserJsonString(String phone) { JSONObject jsonObject = new JSONObject(); String typeString = "whiteUser"; diff --git a/src/main/java/cn/minoa/view/login/RegisterOverviewController.java b/src/main/java/cn/minoa/view/login/RegisterOverviewController.java index 03ad68a..9779e03 100644 --- a/src/main/java/cn/minoa/view/login/RegisterOverviewController.java +++ b/src/main/java/cn/minoa/view/login/RegisterOverviewController.java @@ -7,6 +7,7 @@ import cn.minoa.dataRequestInterface.OrderInfo; import cn.minoa.dataRequestInterface.ResponseData; import cn.minoa.util.EncryptionUtil; import cn.minoa.util.KeyStorageUtil; +import cn.minoa.util.RegisterUtil; import cn.minoa.util.StringByteLengthUtil; import javafx.fxml.FXML; import javafx.scene.control.Alert; @@ -15,7 +16,12 @@ import javafx.scene.control.TextField; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.stage.Stage; +import net.named_data.jndn.Interest; +import net.named_data.jndn.Name; +import net.named_data.jndn.Signature; import net.named_data.jndn.security.KeyChain; +import net.named_data.jndn.security.SecurityException; +import net.named_data.jndn.security.SigningInfo; import net.named_data.jndn.security.pib.Pib; import net.named_data.jndn.security.pib.PibImpl; import net.named_data.jndn.security.tpm.Tpm; @@ -26,6 +32,8 @@ import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; +import java.nio.ByteBuffer; + public class RegisterOverviewController { @SuppressWarnings("unused") @@ -72,7 +80,7 @@ public class RegisterOverviewController { Long seqLong = mainApp.getNewDataReqId(); orderInfo.setSeq(seqLong); // 生成本地pid.db文件,获取公钥 - String publicKey=""; + String publicKey ; try { CertificateV2 certificateV2= KeyManager.INSTANCE.initKeyChain(keyChainNameString).getCertification(keyChainNameString); publicKey = Common.base64Encode(certificateV2.wireEncode().getImmutableArray(), false); @@ -85,28 +93,41 @@ public class RegisterOverviewController { Alert alert = new Alert(Alert.AlertType.INFORMATION); alert.setTitle("注册失败"); alert.setHeaderText("注册账号失败"); - alert.setContentText("本地密钥生成失败:\n"+error.getMessage()); + alert.setContentText("本地密钥生成失败:\n"+error.getMessage()+"\n" + +"建议更换用户名,重新进行注册!"); alert.showAndWait(); return ; } - // 首先向区块链发送注册信息 - String pubkey=publicKey; -// String pubkey = "Bv0CIgcvCAVsbGFhYQgDS0VZCAhyVwiW+kaX7QgMY2VydC1yZXF1ZXN0CAn9AAABcSP8KDIUCRgBAhkEAiVRABX9AU8wggFLMIIBAwYHKoZIzj0CATCB9wIBATAsBgcqhkjOPQEBAiEA/////wAAAAEAAAAAAAAAAAAAAAD///////////////8wWwQg/////wAAAAEAAAAAAAAAAAAAAAD///////////////wEIFrGNdiqOpPns+u9VXaYhrxlHQawzFOw9jvOPD4n0mBLAxUAxJ02CIbnBJNqZnjhE50mt4GffpAEQQRrF9Hy4SxCR/i85uVjpEDydwN9gS3rM6D0oTlF2JjClk/jQuL+Gn+bjufrSnwPnhYrzjNXazFezsu2QGg3v1H1AiEA/////wAAAAD//////////7zm+q2nF56E87nKwvxjJVECAQEDQgAEgCbgPaAk0RRziBAW/beuF5fBQdJdbZhtKrT+FRdXq6sqPxvhM3VQF+WrBehiA5TsKpLzwzNoE8kKt8gyevM4dxZHGwEDHBgHFggFbGxhYWEIA0tFWQgIclcIlvpGl+39AP0m/QD+DzIwMjAwMzI5VDAxNTEwMf0A/w8yMDIwMDQwOFQwMTUxMDAXSDBGAiEApxH8lJntSBM/NwV+laSdifH674+76xZnxVF4vKGaXXkCIQCj3OyzagvjqYrJmZ9f00PWVISXRyrIrKmwFbwzsk/hQw=="; - String phonenumber=phoneNumber.getText().trim(); - NDNBlockChainConnectClient ndnBlockChainConnectClient=new NDNBlockChainConnectClient(); - String resString=ndnBlockChainConnectClient.registeNewUser(username, - phonenumber,pubkey); - if(resString.equals("true")){ - System.out.println("用户【"+username+"】在区块链后台被成功注册"); - }else{ - System.out.println("区块链后台注册用户【"+username+"】失败: "+resString); - // 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/ - Alert alert = new Alert(Alert.AlertType.ERROR); - alert.setTitle("区块链注册失败"); - alert.setHeaderText("区块链注册失败"); - alert.setContentText("失败原因:\n"+resString); - alert.showAndWait(); - return ; + // 标志该用户是否已经通过了区块链注册 + boolean b_flag=RegisterUtil.isAccessedBlockUser(keyChainNameString); + // 如果没有注册成功过,向区块链发送注册信息;否则,跳过区块链注册 + if(!b_flag) { + String pubkey = publicKey; + String phonenumber = phoneNumber.getText().trim(); + NDNBlockChainConnectClient ndnBlockChainConnectClient = new NDNBlockChainConnectClient(); + String resString = ndnBlockChainConnectClient.registeNewUser(username, + phonenumber, pubkey); + if (resString.equals("true")) { + System.out.println("用户【" + username + "】在区块链后台被成功注册"); + } else { + // 区块链没有注册用户成功,则删掉刚刚生成的密钥文件 + try { + KeyManager.INSTANCE.getKeyChain().deleteIdentity(new Name(keyChainNameString)); + System.out.println("已删除本地密钥:"+keyChainNameString); + } catch (SecurityException e) { + e.printStackTrace(); + } + System.out.println("区块链后台注册用户【" + username + "】失败: " + resString); + // 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/ + Alert alert = new Alert(Alert.AlertType.ERROR); + alert.setTitle("区块链注册失败"); + alert.setHeaderText("区块链注册失败"); + alert.setContentText("失败原因:\n" + resString+"\n" + +"请确保你输入的手机号在系统白名单中,且用户名并没有被注册过。\n " + + "您可以将用户名适当复杂化,以保证其在系统中的唯一性。"); + alert.showAndWait(); + return; + } } // 获取注册时JSON String registerJson=getRegisterJson(publicKey); @@ -127,7 +148,11 @@ public class RegisterOverviewController { } if (codeInteger == 200) { // 注册之后,使用getNews消耗掉新通知 - makeNoticesBeRead(); +// makeNoticesBeRead(); + // 如果该用户是原来注册中断的用户,移除其本地信息 + if(b_flag) { + RegisterUtil.deleteAccessedBlockUser(keyChainNameString); + } // 将此时的keyChainName持久化到本地 MinoaDataAPI.keyChainNameString=keyChainNameString; KeyStorageUtil.setKeyName(keyChainNameString); @@ -139,11 +164,20 @@ public class RegisterOverviewController { alert.showAndWait(); dialogStage.close(); } else { + // 后台没有注册用户成功,则删掉刚刚生成的密钥文件 + try { + KeyManager.INSTANCE.getKeyChain().deleteIdentity(new Name(keyChainNameString)); + System.out.println("已删除本地密钥:"+keyChainNameString); + } catch (SecurityException e) { + e.printStackTrace(); + } + // 将该用户(区块链注册成功,后台注册失败)的注册前缀,保存到本地 + RegisterUtil.setAccessedBlockUser(keyChainNameString); // 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/ Alert alert = new Alert(Alert.AlertType.WARNING); alert.setTitle("注册失败"); alert.setHeaderText("注册失败"); - alert.setContentText("请确保你输入的手机号在系统白名单中,且登录名/账户/昵称并没有被注册过。\n " + + alert.setContentText("请确保你输入的手机号在系统白名单中,且用户名并没有被注册过。\n " + "您可以将用户名适当复杂化,以保证其在系统中的唯一性。"); alert.showAndWait(); } @@ -321,12 +355,13 @@ public class RegisterOverviewController { // 验证输入内容格式 private boolean isRightContent() { //验证昵称是否为空 - if (nickname.getText().trim().equals("")||nickname.getText().trim().contains("@")) { + if (nickname.getText().trim().equals("")||nickname.getText().trim().contains("@")||nickname.getText().trim().contains(" ")) { // 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/ Alert alert = new Alert(Alert.AlertType.WARNING); alert.setTitle("账号错误"); alert.setHeaderText("你的账号错误"); - alert.setContentText("请确保你输入的账号(昵称)不为空,且昵称中不包含\"@\"字符"); + alert.setContentText("请确保你输入的账号(昵称)不为空,且昵称中不包含\"@\"字符;\n" + + "此外,请确保输入的昵称中不包含空格"); alert.showAndWait(); return false; } diff --git a/src/main/java/cn/minoa/view/login/SettingOverviewController.java b/src/main/java/cn/minoa/view/login/SettingOverviewController.java index 8bda77e..67dccfb 100644 --- a/src/main/java/cn/minoa/view/login/SettingOverviewController.java +++ b/src/main/java/cn/minoa/view/login/SettingOverviewController.java @@ -12,6 +12,7 @@ import java.io.*; import java.net.InetSocketAddress; import java.net.Socket; //import java.net.URL; +import java.nio.charset.StandardCharsets; import java.util.Properties; import java.util.regex.Pattern; @@ -28,6 +29,12 @@ public class SettingOverviewController { @FXML private TextField packetPrefix; @FXML + private TextField fileThread; + @FXML + private TextField BlockIP; + @FXML + private TextField BlockPort; + @FXML private ImageView miniLogo; public SettingOverviewController(){ @@ -40,6 +47,9 @@ public class SettingOverviewController { ipAddress.setPromptText("IP格式示例:121.15.171.89"); portAddress.setPromptText("端口号格式示例:6363"); packetPrefix.setPromptText("格式示例:/ndn/edu/pkusz/OA)"); + fileThread.setPromptText("文件传输并发数[1-100]"); + BlockIP.setPromptText("IP格式示例:121.15.171.89"); + BlockPort.setPromptText("端口号格式示例:8010"); } // 根据表单修改配置文件 @@ -49,12 +59,13 @@ public class SettingOverviewController { //修改本地配置文件 changeSettingProperties(); mainApp.loadSettingProperties(); + reloadSetting(); //弹窗提示 // 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/ Alert alert = new Alert(Alert.AlertType.INFORMATION); alert.setTitle("设置成功"); - alert.setHeaderText("服务器地址/包前缀修改成功"); - alert.setContentText("您已成功修改服务器IP/包前缀。\n请重新启动应用以生效新设置!"); + alert.setHeaderText("配置文件修改成功"); + alert.setContentText("您已成功修改系统配置。\n请重新启动应用以生效新设置!"); alert.showAndWait(); System.exit(0); } @@ -70,16 +81,23 @@ public class SettingOverviewController { if (inputStream == null) { System.out.println("没有找到配置文件..."); } + // 解决中文乱码问题 + BufferedReader bf = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8)); Properties settingProperties = new Properties(); - settingProperties.load(inputStream); + settingProperties.load(bf); settingProperties.setProperty("ServerIPAddress",ipAddress.getText().trim()); settingProperties.setProperty("ServerPortAddress",portAddress.getText().trim()); settingProperties.setProperty("DataPackagePrefix",packetPrefix.getText().trim()); + settingProperties.setProperty("ThreadNumberForFileTransfer",fileThread.getText().trim()); + settingProperties.setProperty("ndnBlockChainIPAddress",BlockIP.getText().trim()); + settingProperties.setProperty("ndnBlockChainPortAddress",BlockPort.getText().trim()); outputStream=new BufferedOutputStream(new FileOutputStream(mainApp.getClientPath()+ File.separator+"ndn"+File.separator+"settings.properties")); + // 解决中文乱码问题 + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(outputStream, StandardCharsets.UTF_8)); // URL url = MainApp.class.getClassLoader().getResource("ndn/settings.properties"); // outputStream = new FileOutputStream(url.getPath()); - settingProperties.store(outputStream,"修改配置文件"); + settingProperties.store(bw,"修改配置文件"); } catch (IOException e) { e.printStackTrace(); }finally{ @@ -102,6 +120,15 @@ public class SettingOverviewController { } } + // 重载参数 + private void reloadSetting(){ + ipAddress.setText(mainApp.minoaServerIpString); + portAddress.setText(mainApp.minoaServerPortInteger.toString()); + fileThread.setText(mainApp.threadNumberForFileTransfer.toString()); + packetPrefix.setText(mainApp.globalPrefixString); + packetPrefix.setDisable(true); + } + /* * @param mainApp */ @@ -109,8 +136,11 @@ public class SettingOverviewController { this.mainApp = mainApp; ipAddress.setText(mainApp.minoaServerIpString); portAddress.setText(mainApp.minoaServerPortInteger.toString()); + fileThread.setText(mainApp.threadNumberForFileTransfer.toString()); packetPrefix.setText(mainApp.globalPrefixString); packetPrefix.setDisable(true); + BlockIP.setText(mainApp.NDNBlockChainIPAddress); + BlockPort.setText(mainApp.NDNBlockChainPortAddress.toString()); } /* @@ -192,6 +222,36 @@ public class SettingOverviewController { alert.showAndWait(); return false; } + //验证前缀是否为空 + if (fileThread.getText().trim().equals("")) { + // 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/ + Alert alert = new Alert(Alert.AlertType.WARNING); + alert.setTitle("线程数错误"); + alert.setHeaderText("你的线程数错误"); + alert.setContentText("请确保你输入的线程数不为空。"); + alert.showAndWait(); + return false; + } + //判断线程数是否正确 + boolean flag_thread=true; + try{ + Integer threadnumber=Integer.parseInt(fileThread.getText().trim()); + if((threadnumber<1)||(threadnumber>100)){ + flag_thread=false; + } + }catch(Exception e){ + flag_thread=false; + }finally { + if(flag_thread==false){ + // 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/ + Alert alert = new Alert(Alert.AlertType.WARNING); + alert.setTitle("线程数错误"); + alert.setHeaderText("你的线程数错误"); + alert.setContentText("请确保你输入的文件传输线程数是正整数且范围在1-100之间。"); + alert.showAndWait(); + return false; + } + } //使用socket判断这里的ip和端口号是否可以连接上 String ipHost=ipAddress.getText().trim(); Integer portHost=Integer.parseInt(portAddress.getText().trim()); @@ -204,6 +264,68 @@ public class SettingOverviewController { alert.showAndWait(); return false; } + //验证IP是否为空 + if (BlockIP.getText().trim().equals("")) { + // 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/ + Alert alert = new Alert(Alert.AlertType.WARNING); + alert.setTitle("IP错误"); + alert.setHeaderText("你的区块链IP错误"); + alert.setContentText("请确保你输入的区块链IP不为空。"); + alert.showAndWait(); + return false; + } + //验证IP格式是否正确 + if (!ipCheck(BlockIP.getText().trim())) { + // 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/ + Alert alert = new Alert(Alert.AlertType.WARNING); + alert.setTitle("IP错误"); + alert.setHeaderText("你的区块链IP错误"); + alert.setContentText("请确保你输入的区块链IP格式正确。"); + alert.showAndWait(); + return false; + } + //验证端口号是否为空 + if (BlockPort.getText().trim().equals("")) { + // 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/ + Alert alert = new Alert(Alert.AlertType.WARNING); + alert.setTitle("端口号错误"); + alert.setHeaderText("你的区块链端口号错误"); + alert.setContentText("请确保你输入的区块链端口号不为空。"); + alert.showAndWait(); + return false; + } + //判断端口号是否正确 + boolean flag_b_port=true; + try{ + Integer port=Integer.parseInt(BlockPort.getText().trim()); + if((port<1)||(port>65535)){ + flag_b_port=false; + } + }catch(Exception e){ + flag_b_port=false; + }finally { + if(flag_b_port==false){ + // 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/ + Alert alert = new Alert(Alert.AlertType.WARNING); + alert.setTitle("端口号错误"); + alert.setHeaderText("你的区块链端口号错误"); + alert.setContentText("请确保你输入的区块链端口号格式正确。"); + alert.showAndWait(); + return false; + } + } + //使用socket判断这里的ip和端口号是否可以连接上 + ipHost=BlockIP.getText().trim(); + portHost=Integer.parseInt(BlockPort.getText().trim()); + if(!isHostConnectable(ipHost,portHost)){ + // 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/ + Alert alert = new Alert(Alert.AlertType.WARNING); + alert.setTitle("连接错误"); + alert.setHeaderText("地址连接错误"); + alert.setContentText("请确保你输入的区块链IP及端口号是可达的。"); + alert.showAndWait(); + return false; + } //判断是否与原内容一致 if(isNotChange()){ Alert alert = new Alert(Alert.AlertType.WARNING); @@ -219,8 +341,11 @@ public class SettingOverviewController { // 判断新设置的参数是否与原参数一致 public boolean isNotChange(){ if(ipAddress.getText().trim().equals(mainApp.minoaServerIpString)&& - portAddress.getText().trim().equals(mainApp.minoaServerPortInteger.toString())&& - packetPrefix.getText().trim().equals(mainApp.globalPrefixString)){ + portAddress.getText().trim().equals(mainApp.minoaServerPortInteger.toString())&& + packetPrefix.getText().trim().equals(mainApp.globalPrefixString)&& + fileThread.getText().trim().equals(mainApp.threadNumberForFileTransfer.toString())&& + BlockIP.getText().trim().equals(mainApp.NDNBlockChainIPAddress)&& + BlockPort.getText().trim().equals(mainApp.NDNBlockChainPortAddress.toString())){ return true; }else{ return false; diff --git a/src/main/java/cn/minoa/view/mine/SingleEmailDetailsController.java b/src/main/java/cn/minoa/view/mine/SingleEmailDetailsController.java index 3ccab5f..e395ee6 100644 --- a/src/main/java/cn/minoa/view/mine/SingleEmailDetailsController.java +++ b/src/main/java/cn/minoa/view/mine/SingleEmailDetailsController.java @@ -3,7 +3,7 @@ package cn.minoa.view.mine; import java.io.File; import cn.minoa.MainApp; -import cn.minoa.dataRequestInterface.DownLoadClientBasedFacePool; +import cn.minoa.dataRequestInterface.DownLoadClientBPRenewal; import cn.minoa.model.Email; import javafx.fxml.FXML; import javafx.scene.control.Alert; @@ -14,7 +14,6 @@ import javafx.scene.control.Alert.AlertType; import javafx.scene.layout.Pane; import javafx.scene.text.Text; import javafx.stage.DirectoryChooser; -import javafx.stage.FileChooser; import javafx.stage.Stage; public class SingleEmailDetailsController { @@ -132,7 +131,7 @@ public class SingleEmailDetailsController { sliceNum++; } Long startTime = System.currentTimeMillis(); - DownLoadClientBasedFacePool downLoadClient = new DownLoadClientBasedFacePool(pathfilename, + DownLoadClientBPRenewal downLoadClient = new DownLoadClientBPRenewal(pathfilename, localDirString,sliceNum,mainApp.threadNumberForFileTransfer); // 下载文件 boolean res = downLoadClient.downloadData(); diff --git a/src/main/resources/fxml/login/SettingOverview.fxml b/src/main/resources/fxml/login/SettingOverview.fxml index 05ac079..9fc429d 100644 --- a/src/main/resources/fxml/login/SettingOverview.fxml +++ b/src/main/resources/fxml/login/SettingOverview.fxml @@ -8,37 +8,46 @@ - -