首页 > 其他分享 >冲刺day3

冲刺day3

时间:2023-12-16 16:00:11浏览次数:22  
标签:tmp return day3 冲刺 length param file catch

1 今日任务完成情况

1.1功能整合与GUI界面的优化

改善了各个函数之间的调用关系,整理了登录注册页面与主页面之间的优先级顺序,进一步对功能进行整合。

image
image

1.2 完善安全证书发放功能

在昨天的安全证书发放基础上,继续进行完善和修改。

今天生成了测试需要的证书,设置了初始密码。

1.3 完善加密传输功能

在昨天实现SSL的基础上进一步实现了文件的传输。

文件发送部分代码:

复制代码
public FileSender(){
}
public void setSocket(Socket socket){
	if(this.socket != null && !this.socket.isClosed()){
		try {
			this.socket.close();
			socket = null;
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	this.socket = socket;
	if(socket != null){
		try {
			inputStream  = this.socket.getInputStream();
			outputStream = this.socket.getOutputStream();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	printWriter = null;
	reader = null;
}
/**
 * 发送指定文件
 * @param filePath 带路径的文件名
 * @return
 */
public boolean sendFile(String filePath){
	File file = new File(filePath);
	if(!file.exists()){
		setLastError("文件不存在!");
		return false;
	}
	//1。向接收端说hello 
	if(!sayHello()){
		setLastError("SayHello Error\n" + getLastError());
		return false;
	}
	//2.向接收端发送文件名
	if(!sendFileName(file.getName())){
		setLastError("发送文件名出错");
		return false;
	}
	//3.向接收端发送文件长度
	if(!sendFileLength(file.length())){
		setLastError("发送文件长度出错");
		return false;
	}
	//4.向接收端发送文件二进制数据
	if(!sendFileBody(file, file.length())){
		setLastError("发送文件体出错!");
		return false;
	}

        // 5.向接收端发送文件摘要
        if (!sendFileDigest(file)) {
            setLastError("发送文件摘要失败或文件被修改!");
            return false;
        }

	return true;
}
/**
 * 向接收端sayHello
 * @return
 */
private boolean sayHello(){
	writeMessage(HELLO);
	String result = readMessage();
	if(isResultSuccess(result)){
		return true;
	}
	return false;
}
/**
 * 向接收端发送文件名
 * @param fileName
 * @return
 */
private boolean sendFileName(String fileName){
	writeMessage("filename:"+fileName);
	return isResultSuccess(readMessage());
}
/**
 * 向接收端发送文件长度
 * @param fileLength
 * @return
 */
private boolean sendFileLength(long fileLength){
	writeMessage("filelength:" + String.valueOf(fileLength));
	return isResultSuccess(readMessage());
}
/**
 * 发送文件体
 * @param filePath
 * @return
 */
private boolean sendFileBody(File file,long length){
	try {
		if(length == 0){
			length = file.length();
		}
		FileInputStream fileInputStream = new FileInputStream(file);
		writeBinaryData(fileInputStream, length);
	} catch (FileNotFoundException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	return true;
}

    /**
     * 发送文件摘要
      
     
@param file
     * @return
     * @throws IOException
     */
    private boolean sendFileDigest(File file) {
        try {
            writeMessage(fileDigest(file, "MD5"));
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return isResultSuccess(readMessage());
    }
/**
* 从输入流读取一条消息
* @return
/
private String readMessage(){
String result = "";
if(reader == null){
reader = new InputStreamReader(inputStream);
}
StringBuffer buffer = new StringBuffer();
char tmp;
try {
while((tmp = (char)reader.read()) > 0 && tmp!='\n'){
buffer.append(tmp);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
if(e.getMessage().contains("No trusted certificate found")){
setLastError("对方证书不受信任!");
}
}
result = buffer.toString();
System.out.println("返回:" +result);
return result;
}
/
*
* 输出一条消息
* @param message
/
private void writeMessage(String message){
if(printWriter == null){
printWriter = new PrintWriter(outputStream);
}
printWriter.write(message);
printWriter.write('\n');
printWriter.flush();
System.out.println("发送:" + message);
}
/
*
* 传输二进制数据
* @param sourceInputStream 数据源
* @param length 要传输的数据长度
/
private void writeBinaryData(InputStream sourceInputStream,long length){
byte[] buffer = new byte[1024];
long count = 0;
int tmp;
try {
while(((tmp = sourceInputStream.read(buffer)) > 0) && count < length){
if(count + tmp >length){
tmp = (int)(length - count);
}
outputStream.write(buffer, 0, tmp);
count += tmp;
}
System.out.println("文件发送完毕!");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/
*
* 接收指定长度的二进制数据
* @param destOutputStream
* @param length
*/
private void readBinaryData(OutputStream destOutputStream,int length){
byte[] buffer = new byte[1024];
int count = 0;
int tmp;
try {
while(count < length &&(tmp = inputStream.read(buffer)) > 0){
if(count + tmp >length){
tmp = length -count;
}
destOutputStream.write(buffer, 0, tmp);
count += tmp;
}

	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}

    /**
     * 获取文件摘要
     * @param file
     * @param md
     * @return
     * @throws IOException
     */
    private String fileDigest(File file, String md) throws IOException {
        MessageDigest digest = null;
        try {
            digest = MessageDigest.getInstance(md);
        } catch (NoSuchAlgorithmException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        InputStream in = new BufferedInputStream(new FileInputStream(file));
        int ch;
        while ((ch = in.read()) != -1) {
            // 用指定字节更新摘要
            digest.update((byte) ch);
        }
        in.close();
        // 完成散列摘要计算
        byte[] hash = digest.digest();
        return byteToString(hash);
    }

    /**
     * 字符数组转换为字符串
      
     
@param in
     * @return
     * @throws Exception
     */
    private String byteToString(byte[] scoure) {
        StringBuilder builder = new StringBuilder();
        for (byte c : scoure) {
            builder.append((int) c);
        }
        return builder.toString();
    }

    /**
     * 判断返回结果是否为成功
      
     
@param result
     * @return
     */
private boolean isResultSuccess(String result){
return result.contains(SUCCESS_CODE);
}

public void setLastError(String error){
	this.lastError = error;
}
public String getLastError(){
	return lastError;
}

}

其余代码已经托管到github。

2 冲刺第二天

任务 负责人 工作量
进一步功能整合 肖权城 3
完善安全证书发放功能 张顺扬 3
完善多线程 李心怡 3
完善加密传输功能 徐元琦 3
完善检验功能 沈楗翔 3

3 明日任务安排

任务 负责人 工作量
进一步功能整合 肖权城 3
完善安全证书功能 徐元琦 3
完善多线程 张顺扬 3
完善加密传输功能 李心怡 3
完善加密传输功能 沈楗翔 3

标签:tmp,return,day3,冲刺,length,param,file,catch
From: https://www.cnblogs.com/xiaoquancheng/p/17904938.html

相关文章

  • 冲刺day1
    冲刺DAY11各个成员在Alpha阶段认领的任务20211322肖权城实现本地与线上I/O模块20211406张顺扬安全处理模块20211312徐元琦总体设计20211328沈楗翔算法应用20211321李心怡安全处理模块2明日各个成员的任务安排20211322肖权城服务器多线......
  • Day31 方法的定义和调用
    方法的定义和调用Java的方法类似于其它语言的函数,是一段用来完成特定功能的代码片段,一般情况下,定义一个方法包含以下语法:方法包含一个方法头和一个方法体。下面是一个方法的所有部分:修饰符:修饰符,这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。如:publics......
  • 算法学习Day3虚拟头指针,设计链表,反转链表
    Day3虚拟头指针,设计链表,反转链表ByHQWQF2023/12/15笔记203.移除链表元素给你一个链表的头节点head和一个整数val,请你删除链表中所有满足Node.val==val的节点,并返回新的头节点。解法:虚拟头指针看起来非常简单,但是由于如果直接对原始的链表进行操作,如果头节点的v......
  • 12月集训游记(day1-day3)
    Day1好好好,今天没有爆零,这真是一个良好的开局,接下来的集训我一定会学有所得的哈哈哈哈哈哈哈哈哈…总结一下今天的题目T1反正是个动态规划首先,怎么看出来这是个动态规划的……因为计数问题不是组合数就是dp,而显然,如果这道题存在组合数做法我更不会......
  • 冲刺(day5)
    团队任务总结一、任务分配与成果今天,我们小组协同完成了文件上传与下载页面的设计与编码,每位成员积极参与并贡献力量:设计与布局:张钰权负责整体页面布局和样式设计,保障了页面在各种设备上的出色显示效果。用户体验优化:周绍坤专注于表单元素的设计和样式调整,从而提升了用户填......
  • 代码随想录算法训练营Day3 | 203.移除链表元素、707.设计链表、206.翻转链表
    这三道题都不涉及什么难以理解的算法,是对链表基础知识的一个复习巩固对于有数据结构基础的同学来说这个没有什么难度但是,写代码的过程中,我明显感觉到,我需要更加完善和统一的代码风格,作为一个前OIer,我的c和cpp混用的情况在基础数据结构的封装层面造成了不小的混乱!我需要去补充c......
  • 冲刺(day4)
    团队任务总结 一、团队成员任务分配为推动项目进展,团队今天共同完成了登录页面的设计与编码。以下是团队成员在页面开发中的任务分配和进展:张钰权:负责整体页面布局和样式设计,确保页面在不同设备上的良好显示。周绍坤:主要负责表单元素的设计和样式调整,提高用户体验,确保信息......
  • Day30 了解什么是方法
    什么是方法?System.out.printin(),那么它是什么呢?(System是类out是一个对象printin则是方法)​意思是调用系统中的一个对象中的发放Java方法是语句的集合,它们在一起执行一个功能。方法是解决一类问题的步骤的有序组合方法包含于类或对象中方法在程......
  • 冲刺(day2)
    团队任务总结一、团队成员任务分配为了推进项目的进展,我们团队在今天共同完成了两个重要的功能模块。以下是团队成员在这两个模块上的任务分配和进展:张钰权:负责解密功能的实现。成功完成了解密文件的编写,包括AES解密和RSA密钥解密,确保解密过程的正确性和安全性。周绍坤:......
  • 第六天冲刺
    man-K【电子公文传输系统·团队项目】第五次作业冲刺总结第六天团队作业(五):冲刺总结成员完成工作情况成员主要任务工作量厉彦宏sm2加解密功能实现6孔垂闽辅助实现sm2加解密模块4农启镰适配sm2加解密功能4王晨博完善前端页面及接口调试3丁乙倍......