团队冲刺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. BZOJ 2547: [Ctsc2002]玩具兵(二分答案+二分图匹配)

    传送门 解题思路 可以发现天兵不用管,答案的一个上界是\(2*k\),就是天兵一个个换.刚开始写了个拆\(6\)点的网络流,调了半天发现自己假了..说说正解,首先可以发现交换士兵其实就是种类的交换,那 ...

  2. Houdni学习——【三】裂开的墙砖

    Houdni学习--[三]裂开的墙砖 Houdinisophoudinisop Houdni学习--[三]裂开的墙砖 一.OverView 一条从板块上裂开的纹路,并在一段距离后逐渐变细. sop 二 ...

  3. Linux(Ubuntu)常用命令(一)

    Linux先知: Linux历史: 关于这个我就不再多说了,其实是一个很有意思的故事串,网上找下一大堆. 类Unix系统目录结构: ubuntu没有盘符这个概念,只有一个根目录/,所有文件都在它下面 ...

  4. “希希敬敬对”队软件工程第九次作业-beta冲刺第六次随笔

    “希希敬敬对”队软件工程第九次作业-beta冲刺第六次随笔 队名:  “希希敬敬对” 龙江腾(队长) 201810775001 杨希                   201810812008 何敬 ...

  5. 关于array_merge()的注意

    array_merge() 函数把两个或多个数组合并为一个数组. 1 如果键名有重复,该键的键值为最后一个键名对应的值(后面的覆盖前面的). 2 如果数组是数字索引的,则键名会以连续方式重新索引. 2 ...

  6. docker-bridge network

    根据下面这图示,可以了解两个container之间是如何通信的 通过ip link 和 ip a可以看到本地有个docker0 link. [root@localhost ~]# ip link : ...

  7. unity碰撞检测(耗费性能)

    using System.Collections; using System.Collections.Generic; using UnityEngine; public class PengZhua ...

  8. python3 requests库学习笔记(MOOC网)

    奏:HTTP协议对资源的操作 方法说明:GET 请求获取URL位置的资源HEAD 请求获取URL位置资源的响应消息报告,即获得该资源的头部信息POST 请求向URL位置的资源后附加新的数据PUT 请求 ...

  9. HDFS学习笔记二

    文章来源于:https://blog.csdn.net/xuejingfu1/article/details/52554174 文件写入staging(分阶段进行) 一个客户端的创建文件的请求并不直接 ...

  10. 解决VMwave下卡死的办法

    在VMwave路径下找到vmwave.log文件: 如上图所示:在资源监视器中找到name = vmwave-vmx.exe ,pid = 5940的进程,然后杀死.