团队冲刺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. LOJ 2557 「CTSC2018」组合数问题 (46分)

    题目:https://loj.ac/problem/2557 第一个点可以暴搜. 第三个点无依赖关系,k=3,可以 DP .dp[ cr ][ i ][ j ] 表示前 cr 个任务.第一台机器最晚完 ...

  2. 汇编 “ program has no starting address ”解决方法

           

  3. vue数据渲染、条件判断及列表循环

    1.数据渲染  {{msg}} <template> <div id="app"> {{msg}} </div> </template&g ...

  4. Mac上VMWare Fusion配置多台cent os

    一.创建虚拟机(准备工作) 1.使用VMWare Fusion 创建第一台虚拟机 2.选择操作系统(本次使用的是使用cent os 6.5 64bit 系统) 3.选择磁盘大小(楼主mac上的磁盘大小 ...

  5. PyQuery爬取历史天气信息

    1.准备工作: 网址:https://lishi.tianqi.com/xian/index.html 爬虫类库:PyQuery,requests 2.网页分析: 红线部分可更改为需要爬取的城市名,如 ...

  6. 【原】webpack--plugins,主要解释plugins干了啥

    其实呢,plugins是增强webpack的功能, 插件用于bundle文件的优化,资源管理和环境变量的注入, 可以理解为任何loaders不能做的事让它来做, 作用于整个构建过程. 常见的plugi ...

  7. jquery 自定义类

    jQuery自定义类封装: (function ($) { $.DragField = function (arg) { var name = "你好"; //这个是私有变量,外部 ...

  8. JS 替换

    JS 字符串有replace() 方法.但这个方法只会对匹配到的第一个字串替换. 如下例: var str = "wordwordwordword"; var strNew = s ...

  9. Zlib not installed

    若提示:zlib not installed   wget http://zlib.net/zlib-1.2.8.tar.gz   tar zxf zlib-1.2.8.tar.gz cd zlib- ...

  10. Linux系统ubuntu17安装jdk8并配置环境变量

    上班多年,一直没有真正在Linux下开发过,没有捣鼓到Linux服务器,成为憾事.最近由于想学习Python,于是开始看书,学习Linux,学习shell编程. 选择Linux,先从最简单的ubunt ...