InputStreamReader in1= null,in2 = null; OutputStreamWriter out1= null;
String temp=null,temp0 = null,temp1 = null,temp2 = null; try{ }
catch(IOException e){ } try{
System.out.println(\服务器已经启动!\); you1 = server1.accept(); you2 = server2.accept();
in1 = new InputStreamReader(you1.getInputStream()); out1 =new OutputStreamWriter(you1.getOutputStream()); BufferedWriter bout1 = new BufferedWriter(out1); BufferedReader bin1 = new BufferedReader(in1); in2 = new InputStreamReader(you2.getInputStream()); BufferedReader bin2 = new BufferedReader(in2);
while(true){ }
server1.close(); you1.close(); server2.close(); you2.close();
temp0=bin1.readLine(); if(!temp0.equals(\)){ }
if(temp0.equals(\)){ }
temp1=bin2.readLine(); temp2=bin2.readLine(); bout1.write(\收到\); bout1.newLine(); bout1.flush();
bout1.write(\!\); bout1.newLine(); bout1.flush();
System.out.println(\连接已经断开!\); break; temp=temp0;
System.out.println(e);
server1 = new ServerSocket(1895); server2 = new ServerSocket(1896);
}
}
}
catch(IOException e1){
System.out.println(\连接已经断开!\); }
Server s=new Server(); s.decode(temp,temp1,temp2);
六、运行结果
(1)启动服务器
(2)界面打开图
(3)输入要加密的字符串,密钥,及起始位
(4)点击加密出现消息框
(5)点击确定后客户端将信息发送给服务器,控制台显示交流信息,并断开连接。 客户端控制台
服务器控制台
(6)服务器端弹出解密界面,密文,密钥,起始位已填好
(7)点击解密,查看原文
(8)点击确定关闭程序
七、问题及解决方法
(1)问题一:本想在客户类中声明界面类对象,在界面关闭后,获取密文,密钥,起始位的返回值,再将该信息发给服务器,但是一直没有找到界面关闭后的返回对象,因而无法控制在界面关闭后再将信息发送。
解决办法:换做在界面类中声明客户类对象,在界面加密操作弹出密文对话框并点击确定后,再将密文,密钥,起始位的传值给客户类run()方法,从而给服务器发送消息。
(2)问题二:在服务器接受消息的语句先后顺序上出了问题,本来是在三个readline()方法的语句后再进行连接断开判断,但是发现,客户端是通过通道一发送断开连接的信息,通道二并没有再发送信息,但是服务器在收到通道一的消息后,一直等待通道二发送消息,导致程序等待。
解决办法:将连接断开判断的语句放在通道一的readline()方法语句后,这样,在通道一收到断开的信息后,就可终端连接。