实验五 Java网络编程及安全
实验内容
- 实现TCP网络通讯方式,结对进行实验,一人服务器,一人客户端。
- 掌握密码技术的使用。
实验步骤(客户端)
-
1.学习Java网络编程,了解一些网络编程的基本概念,查询服务器电脑的IP地址。
-
2.产生随机密钥,输入加密:
KeyGenerator kg=KeyGenerator.getInstance("DESede");
kg.init(168);
SecretKey k=kg.generateKey( );
FileOutputStream f=new FileOutputStream("key1.dat");
ObjectOutputStream b=new ObjectOutputStream(f);
b.writeObject(k);
FileInputStream f=new FileInputStream("key1.dat");
ObjectInputStream b=new ObjectInputStream(f);
Key k=(Key)b.readObject( );
byte[ ] kb=k.getEncoded( );
FileOutputStream f2=new FileOutputStream("keykb1.dat");
f2.write(kb);
// 打印密钥编码中的内容
for(int i=0;i<kb.length;i++){
System.out.print(kb[i]+",");
}
- 3.建立连接,在Java API中以java.net.Socket类的对象代表网络连接,所以建立客户端网络连接,也就是创建Socket类型的对象,该对象代表网络连接。
Socket socket = new Socket("172.20.10.4", 1125);
Socket socket1 = new Socket("172.20.10.4", 1126);
- 4.交换数据,数据传输功能由Java IO实现。
//获得从服务器端来的网络输入流
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//获得从客户端向服务器端输出数据的网络输出流
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
PrintWriter out1 = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
//创建键盘输入流,以便客户端从键盘上输入信息
//BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
System.out.print("正在读取文件
");
FileInputStream f1 = new FileInputStream("key1.dat");
FileInputStream f3 = new FileInputStream("SEnc.dat");
//String str=stdin.readLine(); //从键盘读入待发送的数据
String str;
out.println(f1); //通过网络传送到服务器
out1.println(f3);
System.out.print("已发送
");
str = in.readLine();//从网络输入流读取结果
System.out.println("从服务器接收到的结果为:" + str); //输出服务器返回的结果
catch (Exception e) {
System.out.println(e);
}
- 5.在服务器端通信完成以后,关闭服务器端连接。
finally{
//stdin.close();
//in.close();
//out.close();
//socket.close();
}
- 6.结果截图
实验中遇到的问题及解决过程
-
连接时显示无法成功连接。
解决方法:
1.既然没有显示代码错误,问题应该出现在连接的部分;
2.查看IP地址和端口号,发现IP地址错误;
3.重新输入IP地址,再运行。 -
连接时显示
java.net.ConnectException: Connection timed out: connect
。
解决方法:感觉是连接超时,但一直出现这个问题,换了无线网继续试。
PSP
步骤 | 耗时 | 百分比 |
---|---|---|
需求分析 | 20分钟 | 12.5% |
设计 | 60分钟 | 37.5% |
代码实现 | 40分钟 | 25% |
测试 | 10分钟 | 6% |
分析总结 | 30分钟 | 18% |
实验体会
通过此次实验,尝试了用Java语言进行加密和解密,服务器和客户端。学习了一些网络编程的知识,通过实践,对其有了更深的印象。
结对伙伴
-
20145315 http://www.cnblogs.com/5315hejialei/p/5471396.html