团队冲刺DAY7

今天是2019.6.2,交项目的最后一天。

今天的任务是将之前写好的服务器和加解密算法以及图形界面有机结合在一起。

早上8:00,坐在电脑前,一脸懵,因为图形界面不是很懂,所以不知道应该怎么做。

所以在网上找了相关的代码,看了一上午,下午发现一点相同点,就是将客户端和服务器的接收和发送写成两个线程,并将组件的操作替换成输出和输入。

虽然我们的服务器和客户端就是按照这样的思路写出来的,但是上午的时候,走偏了,将接收和发送两个操作都写在监听事件中了,这就造成,只有当客户端和服务器都点击输入键之后,才会出现三次握手。

下面是客户端聊天过程用于发送信息的线程

class Receive extends Thread {
Socket socket;
public Receive(Socket sock) {
this.socket = sock;
} @Override
public void run() {
// 专门用于接收消息
DataInputStream in;
while (true) {
try {
in = new DataInputStream(socket.getInputStream());
String str = in.readUTF();
client.PoliceListen.stringPrint(str);
} catch (Exception e) {
}
}
}
}

这其中的组件操作就是:

client.PoliceListen.stringPrint(str);

通过将监听类中设置方法,并将这些类都放在一个package中的方法来调用其他类的方法。

当然这不是最终的代码,因为按照要求,在通讯的过程中还要进行加密和解密。

在这个阶段,我还遇到一个问题。

class Send extends Thread {
Socket socket;
public Send(Socket sock) {
this.socket = sock;
}
// 专门用于发送信息
@Override
public void run() {
DataOutputStream out;
String str="";
while (true) {
str = client.PoliceListen.pass();
try {
out = new DataOutputStream(socket.getOutputStream());
out.writeUTF(str);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}

问题就是在这前PoliceListen类中定义了public static类型的变量 String pa(pa变量是用来监听图形界面输入的字符串),并将增加了返回这个字符串的方法pass,但是在输出环节的 Send类中,因为是通过循环来输出图形界面的输入,所以如果不加以控制的话,会一直输出pa,直到图形界面输入了其他的pa值,并继续一直输出下一个pa值。

解决方法:

class Send extends Thread {
Socket socket;
public Send(Socket sock) {
this.socket = sock;
}
// 专门用于发送信息
@Override
public void run() {
DataOutputStream out;
String str="";
while (true) {
str = client.PoliceListen.pass();
if(!temp.equals(str)){
temp = str;
try {
out = new DataOutputStream(socket.getOutputStream());
out.writeUTF(str);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}

通过比较临时变量temp和public static 类型的pa变量的方法来确定是否图形界面是否有新的输入值。

从而比较好的解决了一直无脑输出的情况。

(目前没想到特别好的方法)

大结局

在客户端和服务器加入加密和解密的环节。

这个环节在之前没有图形界面的时候,就已经熟练掌握了,只需要写好加密和解密的接口,如何直接用就可以了。我们之前选定的是DES,因为那个时候刚好密码学讲到DES(没选AES是因为定加密算法的时候,还没学)。

我们除了在网上找了相关的代码,并通过我们的验证和修改,以及编写DESUtil接口,完成了这部分的内容。

加密和解密的部分是通过最简单的内置密钥的方式,还可以换成实验五的DH交换密钥等其他算法。

package client;

import java.net.*;
import java.io.*;
import java.nio.charset.Charset; //聊天过程用于发送信息的线程
class Send extends Thread {
Socket socket;
private static final String SKEY = "abcdefgh";
private static final Charset CHARSET = Charset.forName("gb2312");
public Send(Socket sock) {
this.socket = sock;
}
// 专门用于发送信息
@Override
public void run() {
DataOutputStream out;
String str="";
String temp="3C5CA5E51F7D0F8A";
while (true) {
str = client.PoliceListen.pass();
str = client.DesUtil.encrypt(str, CHARSET, SKEY);
if(!temp.equals(str)){
temp = str;
try {
out = new DataOutputStream(socket.getOutputStream());
out.writeUTF(str);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
} // 创建一个专门用于接收消息的线程
class Receive extends Thread {
Socket socket;
private static final String SKEY = "abcdefgh";
private static final Charset CHARSET = Charset.forName("gb2312");
public Receive(Socket sock) {
this.socket = sock;
} @Override
public void run() {
// 专门用于接收消息
DataInputStream in;
while (true) {
try {
in = new DataInputStream(socket.getInputStream());
String str = in.readUTF();
client.PoliceListen.stringPrint("服务器发来:"+str);
str = client.DesUtil.decrypt(str, CHARSET, SKEY);
client.PoliceListen.stringPrint("解密为"+str);
} catch (Exception e) {
}
}
}
} public class Client { static Socket socket; public static void main(String[] args) throws Exception { socket = new Socket("127.0.0.1", 5678); System.out.println("客户端.....");
try {
Send send = new Send(socket);
Receive receive = new Receive(socket);
WindowActionEvent win=new WindowActionEvent();
PoliceListen police = new PoliceListen();
//创建监视器
win.setMyCommandListener(police);
//窗口组合监视器
win.setBounds(100,100,460,360);
win.setTitle("信息系统——客户端");
// 打开线程
send.start();
receive.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}

废话不多说,看图!

团队冲刺DAY7的更多相关文章

  1. Alpha冲刺Day7

    Alpha冲刺Day7 一:站立式会议 今日安排: 由林静和周静平共同完成企业风险分级展示这一模块的分级列表展示,该模块主要提供企业自查风险的条件查询功能 由黄腾飞和张梨贤共同完成企业风险分级展示的分 ...

  2. Alpha冲刺——day7

    Alpha冲刺--day7 作业链接 Alpha冲刺随笔集 github地址 团队成员 031602636 许舒玲(队长) 031602237 吴杰婷 031602220 雷博浩 031602634 ...

  3. Beta冲刺——day7

    Beta冲刺--day7 作业链接 Beta冲刺随笔集 github地址 团队成员 031602636 许舒玲(队长) 031602237 吴杰婷 031602220 雷博浩 031602134 王龙 ...

  4. 团队冲刺DAY1

    团队冲刺DAY1 今天的内容是对未来6天的突击有一个大致的规划. 我们小组的选题是客户端-服务器安全信息传递系统,通过讨论,我们认为大概有四个难题. 第一个是服务器和客户端,我们打算用第二天来完成. ...

  5. 【团队冲刺总结】一个编码人员的反(tu)思(cao)

    消失了半个多月了啊,算算时间,好像确实有近个把月没有好好的写博客来了.我一直很想写博客的,之前有老师问过写博客的动力是什么.我想了想,我觉得可能是我比较喜欢看书吧,不管是专业书还是小说(好吧,我承认, ...

  6. 团队冲刺the second day

    今天是我们的团队冲刺的第二天,由于我的电脑出现了一点问题,系统还原了,我有重新配置了一下环境变量和一些eclipse的问题,导致时间浪费了很多,但是我还是做了一些简单的任务,例如编写节日的页面的布局, ...

  7. 团队作业八——第二次团队冲刺(Beta版本)第7天&项目汇总

    项目汇总 第一天:http://www.cnblogs.com/newteam6/p/6879383.html 第二天:http://www.cnblogs.com/newteam6/p/688078 ...

  8. 团队作业八——第二次团队冲刺(Beta版本)第6天

    团队作业八--第二次团队冲刺(Beta版本)第6天 一.每个人的工作 (1) 昨天已完成的工作 简单模式逻辑代码涉及与相关功能的具体实现 (2) 今天计划完成的工作 修改完善注册登录内容界面,编辑错题 ...

  9. 团队作业八——第二次团队冲刺(Beta版本)第5天

    团队作业八--第二次团队冲刺(Beta版本)第5天 一.每个人的工作 (1) 昨天已完成的工作 完成界面跳转界面. (2) 今天计划完成的工作 简单模式逻辑代码涉及与相关功能的具体实现 (3) 工作中 ...

随机推荐

  1. 使用juqery-ui完成联想查询功能

    最近公司的项目有个需求,需要使用联想查询功能.就是一个文本输入框,在输入的时候获取值去后端模糊查询然后按照列表显示在下面.效果如下图: 经过搜索找到这个插件,查阅资料可以完成这个功能,即可以实现静态数 ...

  2. fine report 连接mysql (mac)

    把 /Applications/FineReport/webapps/webroot/WEB-INF/lib 下mysql-connector-java-5.1.39-bin.jar 删掉 在 htt ...

  3. python包导入

    https://www.cnblogs.com/foremostxl/p/9501663.html

  4. java常用排序

    1.冒泡排序 public static int[] bubble(int[] a){ for(int i=0;i<a.length-1;i++){ int tmp=0; for(int j=0 ...

  5. DataTable删除行Delete与Remove的问题

    DataTable删除行使用Delete后,只是该行被标记为deleted,但是还存在,用Rows.Count来获取行数时,还是删除之前的行数,需要使用datatable.AcceptChanges( ...

  6. App知识点(持续更新......)

    1.app的性能测试,即专项测试,需要重点关注那些方面? 内存.cpu占用.耗电量.流量.流畅度等 2.什么是activity?它的生命周期? Activity是一个Android的应用组件,它提供屏 ...

  7. Git 内部原理

    首先要弄明白一点,从根本上来讲 Git 是一个内容寻址(content-addressable)文件系统,并在此之上提供了一个版本控制系统的用户界面. 马上你就会学到这意味着什么. git objec ...

  8. Java开发中的23种设计模式详解(2)结构型

    我们接着讨论设计模式,上篇文章我讲完了5种创建型模式,这章开始,我将讲下7种结构型模式:适配器模式.装饰模式.代理模式.外观模式.桥接模式.组合模式.享元模式.其中对象的适配器模式是各种模式的起源,我 ...

  9. Codeforces The Child and Toy

    The Child and Toy time limit per test1 second On Children's Day, the child got a toy from Delayyy as ...

  10. 记一次CentOS7进单用户模式修改密码的失败经历(faild to load SELinux policy freezing)

    背景:Cent SO7.4root用户密码忘记,根据https://www.linuxidc.com/Linux/2016-08/134034.htm提供的放法修改完密码之后系统启动后一直停留在转圈的 ...