团队冲刺DAY7
团队冲刺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的更多相关文章
- Alpha冲刺Day7
Alpha冲刺Day7 一:站立式会议 今日安排: 由林静和周静平共同完成企业风险分级展示这一模块的分级列表展示,该模块主要提供企业自查风险的条件查询功能 由黄腾飞和张梨贤共同完成企业风险分级展示的分 ...
- Alpha冲刺——day7
Alpha冲刺--day7 作业链接 Alpha冲刺随笔集 github地址 团队成员 031602636 许舒玲(队长) 031602237 吴杰婷 031602220 雷博浩 031602634 ...
- Beta冲刺——day7
Beta冲刺--day7 作业链接 Beta冲刺随笔集 github地址 团队成员 031602636 许舒玲(队长) 031602237 吴杰婷 031602220 雷博浩 031602134 王龙 ...
- 团队冲刺DAY1
团队冲刺DAY1 今天的内容是对未来6天的突击有一个大致的规划. 我们小组的选题是客户端-服务器安全信息传递系统,通过讨论,我们认为大概有四个难题. 第一个是服务器和客户端,我们打算用第二天来完成. ...
- 【团队冲刺总结】一个编码人员的反(tu)思(cao)
消失了半个多月了啊,算算时间,好像确实有近个把月没有好好的写博客来了.我一直很想写博客的,之前有老师问过写博客的动力是什么.我想了想,我觉得可能是我比较喜欢看书吧,不管是专业书还是小说(好吧,我承认, ...
- 团队冲刺the second day
今天是我们的团队冲刺的第二天,由于我的电脑出现了一点问题,系统还原了,我有重新配置了一下环境变量和一些eclipse的问题,导致时间浪费了很多,但是我还是做了一些简单的任务,例如编写节日的页面的布局, ...
- 团队作业八——第二次团队冲刺(Beta版本)第7天&项目汇总
项目汇总 第一天:http://www.cnblogs.com/newteam6/p/6879383.html 第二天:http://www.cnblogs.com/newteam6/p/688078 ...
- 团队作业八——第二次团队冲刺(Beta版本)第6天
团队作业八--第二次团队冲刺(Beta版本)第6天 一.每个人的工作 (1) 昨天已完成的工作 简单模式逻辑代码涉及与相关功能的具体实现 (2) 今天计划完成的工作 修改完善注册登录内容界面,编辑错题 ...
- 团队作业八——第二次团队冲刺(Beta版本)第5天
团队作业八--第二次团队冲刺(Beta版本)第5天 一.每个人的工作 (1) 昨天已完成的工作 完成界面跳转界面. (2) 今天计划完成的工作 简单模式逻辑代码涉及与相关功能的具体实现 (3) 工作中 ...
随机推荐
- zkw 线段树
优秀的 zkw 线段树讲解:<线段树的扩展之浅谈 zkw 线段树> 存一份模板代码(区间修改.区间查询): /* zkw Segment Tree * Au: GG */ #include ...
- [CSP-S模拟测试]:english(可持久化Trie+启发式合并)
题目传送门(内部题24) 输入格式 第一行有$3$个整数$n,opt$,$opt$的意义将在输出格式中提到.第二行有$n$个整数,第$i$个整数表示$a_i$. 输出格式 若$opt=1$,输出一行一 ...
- LintCode之奇偶分割数组
题目描述: 我的分析:题目要求将奇数放在偶数的前面,没有要求将奇数或偶数排序,因此我可以设置两个指针,一个(i)指向数组第一个数字,另一个(j)指向数组的最后一个数字,因为奇数要放在前面,所以从后往前 ...
- codeforces 557D Vitaly and Cycle
题意简述 给定一个图 求至少添加多少条边使得它存在奇环 并求出添加的方案数 (注意不考虑自环) ---------------------------------------------------- ...
- xml解析用正则解决没有标签的文本的解析不出异常
如 <q>sasas<w>eqwe</w>ddas</q> package com.people.xmlToSql; import java.io.F ...
- Python 进阶_迭代器 & 列表解析
目录 目录 迭代器 iter 内建的迭代器生成函数 迭代器在 for 循环中 迭代器与字典 迭代器与文件 创建迭代器对象 创建迭代对象并实现委托迭代 迭代器的多次迭代 列表解析 列表解析的样例 列表解 ...
- DataTable删除行Delete与Remove的问题
DataTable删除行使用Delete后,只是该行被标记为deleted,但是还存在,用Rows.Count来获取行数时,还是删除之前的行数,需要使用datatable.AcceptChanges( ...
- k8s 组件介绍-API Server
API Server简介 k8s API Server提供了k8s各类资源对象(pod,RC,Service等)的增删改查及watch等HTTP Rest接口,是整个系统的数据总线和数据中心. kub ...
- python isinstance()函数和type()函数
一.type()用法 描述: python的 type 函数有两个用法,当只有一个参数的时候,返回对象的类型.当有三个参数的时候返回一个类对象. 语法: 一个参数:type(object) 三个参数: ...
- ThinkPHP的MVC模式
ThinkPHP基于MVC(Model-View-Controller,模型-视图-控制器)模式,并且均支持多层(multi-Layer)设计. 模型(Model)层 默认的模型层由Model类构成, ...