一、实验目的与要求

实验目的:熟悉面向连接的JavaSocket程序的编写。

实验要求:以小组为单位完成,一个小组由两个人组成。以小组为单位提交,请在完成的实验报告中列出小组成员。

二、实验内容

1. 编写Java Socket程序,编写一个基于Client/Server的问答程序,其中服务器端负责发布消息,客户端接收消息。每个客户端在连接上之后,服务器端给它发送一条欢迎消息:欢迎来自********(显示IP地址)的朋友。服务器端同时可以连接多个客户端。(30分)

在服务器声明一个 ServerSocket  对象,在客户端声明一个Socket对象,利用Java Socket实现服务器与客户端之间对话

服务器:

import java.io.*;
import java.net.*;
public class Server {public static void main(String[] args) {        ServerSocket s = null;try{s= new ServerSocket(6789);}catch(IOException e){System.out.println(e);System.exit(1);}while(true) {  //可以同时连接多个客户端         try{Socket cs = s.accept();new ServerWriter(cs).start(); //为每一个客户端开启一个子线程}catch(IOException e){System.out.println(e);}}}static class ServerWriter extends Thread {Socket sock;public ServerWriter(Socket s) {sock = s;}public  void run() {try {DataOutputStream dos = new DataOutputStream(sock.getOutputStream());  //利用accept的方法获取客户端ip地址dos.writeUTF("欢迎来自" + sock.getInetAddress().getHostAddress() + "的朋友" + '\n');dos.close();}catch (IOException e) {System.out.println(e);}}}
}

客户端

import java.io.*;
import java.net.*; public class Client {public static void main(String[] args) throwsUnknownHostException {try { Socket s = new Socket(InetAddress.getLocalHost(), 6789);      DataInputStream dis = new DataInputStream(s.getInputStream());System.out.println(dis.readUTF()); //打印接受到的消息s.close(); }catch (IOException e) {System.out.println(e);} }
}

2. 编写程序,客户连接上服务器后,可以进行自助心理测试,完成测试后,会显示测试结果。测试题目和结果如“心理素质测试和答案分析”文件所示。(30分)

这里我把“心理素质测试和答案分析”文件整理了一下,分为ques.txt和ans.txt两部分,ques.txt里储存问题,并且调整为每个问题一定是占4行,ans.txt里储存处理过的答案。

服务器:

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;public class Server {static int qNum = 70;  //测试题数public static void  main(String[] args) { ServerSocket server;try {server = new ServerSocket(2022);Socket sk = server.accept();System.out.println("客户端连接成功!");DataInputStream dis = new  DataInputStream(sk.getInputStream());DataOutputStream dos = new DataOutputStream( sk.getOutputStream());try {BufferedReader reader = new BufferedReader(new FileReader("ques.txt"));String tempString = null;for(int j = 1;j<=qNum*4;j++){tempString = reader.readLine();dos.writeUTF(tempString);}reader.close();} catch (IOException e1) {e1.printStackTrace();} String str;int ans = 0;try {BufferedReader re = new BufferedReader(new FileReader("ans.txt"));String tempString = null;for(int i = 1;i<= qNum;i++){  str = dis.readUTF();tempString = re.readLine();ans += judge(str,tempString);System.out.println("接受到第 " + i + "个答案  得分 :" + judge(str,tempString));}String strans = Integer.toString(ans);dos.writeUTF(strans);re.close();} catch (IOException e) {e.printStackTrace();} }catch (IOException e) {System.out.println(e);}}public static int judge(String s, String t){//判断得分int idx = t.indexOf(s);char[] T = t.toCharArray();return T[idx+1] - '0';}
}

客户端:

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;public class Client {static int qNum = 70; //测试题数public static void main(String[] args) {Socket client;try {client = new Socket("127.0.0.1", 2022);DataInputStream dis = new DataInputStream(client.getInputStream());DataOutputStream dos = new DataOutputStream(client.getOutputStream());System.out.println("此次测试题数为:" + qNum + ".   (请勿输入多余回车)" + '\n');for(int j = 1;j<=qNum;j++){for(int i = 1;i<=4;i++)   //每次输出4行System.out.println(dis.readUTF());BufferedReader br = new BufferedReader(new InputStreamReader(System.in));String str = br.readLine();dos.writeUTF(str);}String strans = dis.readUTF();System.out.println("您的得分为 : " + strans);int ans =  Integer.parseInt(strans);if(ans > 180)System.out.println("你心理成熟,是面试高手,你一定能通过面试");else if(ans > 150)System.out.println("你心理较成熟,有一定的面试能力,基本上能通过面试,但在有关细节上要多加注意");else if(ans > 130)System.out.println("你心理成熟一般,有一般的面试能力,通过面试有一定的难度,要在回答技巧上多加注意");else if(ans > 100)System.out.println("你心理成熟程度较差,欠缺一定的面试能力,通过面试的可能性不大,要注意认真总结,加大复习的力度");elseSystem.out.println("你心理成熟程度很差,你欠缺的面试能力,不可能通过面试,要在提高综合素质上下功夫");} catch (IOException e) {System.out.println(e);}}
}

ans.txt(部分):
01A2B3C1
02A1B1C3
03A1B2C3
04A1B2C3
05A3B2C1
06A1B2C3
07A2B1C3
08A1B2C3
09A3B1C1
10A1B2C3
ques.txt(部分):

1.如果你的上司牌气很急,批评下属不留情面,大家的情绪经常受到影响,作为下属,你要如何处理?( ) 
A.直接找上司谈话,建议其改变领导方式 
B.私下找领导沟通,婉转请求其注意自己的态度 
C.与其他同事一起商量,联名建议领导改变领导方式 
2.如果你在公务员面试中没有被录取,你会怎样想?( ) 
A.很沮丧,觉得自己没尽全力 
B.没什么大不了的,此处不留我,自有留我处 
C.这是自己的一次宝贵经验,下次再努力 
3.如果你发现你的直接领导可能公款私用,你怎么办?( ) 
A.直接向上级领导反映,决不能放过贪官污吏 
B.私下进行秘密调查,做到心中有数 
C.按照特定程序谨慎办事,既不能影响团结,也不能放任不管 
4. 一份机密文件丢失,某日又出现在你的抽屉里,你将( ) 
A.听之任之,反正已经回来了,不会有什么事 
B.私下请人帮忙调查,找到真正原因 
C.向直接领导报告,并检讨自己的过失 
5.在类似于火车站那样的嘈杂环境中,如果给你一篇枯燥的论文,你会()。 
A.认认真真地阅读,并能领会其中意思 
B.仔细地阅读,但经常会左顾右盼 
C.不可能集中注意力,论文内容不知所云

3. 通过Java Socket方式实现一个基于 Client/Server 的文件传输程序。则需要分别实现客户端和服务器端程序。(40分)

客户端:用面向连接的方式实现通信。采用 Socket 类对象,接收服务器发送的文件并保存在特定的位置。

服务器端:监听客户请求,读取磁盘文件并向客户端发送文件。注意:需要实现文件的读写操作。

服务器:

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class Server extends ServerSocket{private ServerSocket server;private Socket ser;private FileInputStream fis;private DataOutputStream dos;  public Server()throws Exception{try {try{server =new ServerSocket(2016);  while(true){System.out.println("----正在等待客户请求连接----");ser = server.accept();System.out.println("----客户端连接成功----");  System.out.println("----请输入需要传输的文件路径名----");BufferedReader strin = new BufferedReader(new InputStreamReader(System.in)); String fileName = strin.readLine();File file =new File(fileName);fis =new FileInputStream(file);dos =new DataOutputStream(ser.getOutputStream());dos.writeUTF(file.getName());dos.flush();dos.writeLong(file.length());dos.flush();//传输文件byte[] sendBytes =new byte[1024];int length =0;while((length = fis.read(sendBytes,0, sendBytes.length)) >0){dos.write(sendBytes,0, length);dos.flush();}System.out.println("---- <" + file.getName() + "> ---- 已传送给客户端");}}catch (Exception e) {e.printStackTrace();}finally{if(fis !=null)fis.close();if(dos !=null)dos.close();ser.close();}}catch (Exception e) {e.printStackTrace();}}public static void main(String[] args)throws Exception {new Server();}
}

客户端:

import java.io.DataInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.net.Socket;
public class Client extends Socket{private Socket client;private DataInputStream dis;private FileOutputStream fos;private int s=0;  public Client(){try {try {client =new Socket("127.0.0.1", 2016);System.out.println("----连接成功----");  dis =new DataInputStream(client.getInputStream());String fileName = dis.readUTF();long fileLength = dis.readLong();fos =new FileOutputStream(new File("F:/" + fileName));  byte[] sendBytes =new byte[1024];int transLen =0;System.out.println("----开始接收文件<" + fileName +">,文件大小为<" + fileLength +">----");while(true){int read =0;read = dis.read(sendBytes);if(read < 1024)break;transLen += read; if(s==0)System.out.println("接收文件进度" +100 * transLen/fileLength +"%...");s=(s+1)%100;fos.write(sendBytes,0, read);fos.flush();}System.out.println("----接收文件<" + fileName +">成功-------");client.close();}catch (Exception e) {e.printStackTrace();}finally {if(dis !=null)dis.close();if(fos !=null)fos.close();client.close();}}catch (Exception e) {e.printStackTrace();}}public static void main(String[] args)throws Exception {new Client();}
}

《并行与分布式计算》实验五——Java socket 编程相关推荐

  1. java 网络实验_20145220 实验五 Java网络编程

    20145220 实验五 Java网络编程 实验内容 1.用书上的TCP代码,实现服务器与客户端. 2.客户端与服务器连接 3.客户端中输入明文,利用DES算法加密,DES的秘钥用RSA公钥密码中服务 ...

  2. 20145206《Java程序设计》实验五Java网络编程及安全

    20145206<Java程序设计>实验五 Java网络编程及安全 实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统. 实验步骤 我和201451 ...

  3. 在线五子棋JAVA网络编程_实验五 Java网络编程及安全

    一.实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统. 二.实验步骤 1. 基于Java Socket实现安全传输 2. 基于TCP实现客户端和服务器,结对编 ...

  4. 实验五 — — Java网络编程及安全

    java的第五个实验--Java网络编程及安全 北京电子科技学院 实     验    报     告 课程:Java程序设计 班级:1352 姓名:林涵锦 学号:20135213    成绩:    ...

  5. 实验五 Java网络编程及安全 实验报告 20135232王玥

    北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序与设计         班级:1352 姓名:王玥 学号:20135232 成绩:             指导 ...

  6. java小球碰撞实验报告_实验五 Java网络编程及安全 实验报告 20135232王玥

    北京电子科技学院(BESTI) 实验报告 课程:Java程序与设计         班级:1352 姓名:王玥 学号:20135232 成绩:             指导教师:娄嘉鹏       实 ...

  7. 20145326 《Java程序设计》实验五——Java网络编程及安全实验报告

    实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统. 实验步骤 我和20145211黄志远http://www.cnblogs.com/nostalgia-/组 ...

  8. 华科计算机网络报告,华科-计算机网络实验报告-Java Socket编程-网络组建实验

    1.Java编写的邮件客户端 2.网络组建的实验(路由配置.VLAN划分.访问控制) 计算机科学与技术学院 目 录 1实验二 Socket 编 程(E-Mail) .................. ...

  9. 2018-2019-2 20175227张雪莹《Java程序设计》实验五 《网络编程与安全》

    2018-2019-2 20175227张雪莹<Java程序设计> 实验五 <网络编程与安全> 实验报告封面 课程:Java程序设计 班级:1752班 姓名:张雪莹 学号:20 ...

最新文章

  1. 如何营造专属你的企业技术影响力氛围感?我不允许你还不知道
  2. 建空列表list,数组array,矩阵matrix
  3. 安装archlinux_archlinux/manjaro 上安装percona-server
  4. Windows 8 IIS中配置PHP运行环境的方法
  5. 计算机常用英语1000个,1000个常用英语单词.pdf
  6. java云开发_Java 快速开始
  7. 关于“携号转网” 还有许多你不知道的事
  8. 英文的写作 —— 词汇的积累(环境的描写、写人)
  9. 学python能做什么-学习python后能做哪方面的工作
  10. eclipse部署web没部署成功的问题
  11. 常用DOS下MSC指令
  12. php在类里如何调用call_user_func_array《细说php2》
  13. qlikview从mysql中抽取数据的过程,mysql数据同步到sqlserver的过程
  14. 编程之类的文案_精选50句文案,个个都是让你灵感喷涌的句子!
  15. 数据分析-人群画像和目标群体分析
  16. 引用防删——JAVA设计模式总结之六大设计原则
  17. C 语言项目中.h文件和.c文件的关系
  18. LNMP环境下QQ农场的搭建
  19. 2021年施工员-土建方向-岗位技能(施工员)免费试题及施工员-土建方向-岗位技能(施工员)考试总结
  20. 欢迎访问我的个人网站!

热门文章

  1. python const无法使用_const的用法总结
  2. 哈希表、哈希索引详解
  3. android二次打包教程,Android应用程序打包签名、加固、二次打包(图形/命令行)...
  4. Mac android-studio 快捷键整理
  5. 走进分布式系统(分布式系统简介)
  6. 一个令对手都赞叹不已的车模作品
  7. 矩阵乘积计算(Strassen)
  8. PHP json 类型
  9. python安装之后没有pip
  10. OpenSearch 上线实时热搜、个性化底纹功能