第四次过程性考核

https://gitee.com/liuji1/fourth_process_assessment

(一) 问题:使用套接写连接编写一个简单的聊天室程序,客户端主函数放在Client_Main.java文件中,服务器端主函数放在Server_Main.java文件中 

(二) 要求: 

  • 1.客户端从控制台进行输入,并将客户端的输出内容和时间保存到“学号.txt”文件中
  • 2.服务器端读取到客户端的程序后,给客户端以回应,并将客户端的输入内容与服务端的输出内容、时间保存到文本文件中
  • 3.要求服务器端可以实现同时与多个客户端进行通信,与每一个客户端通信的内容,保存为一个“学号_ip.txt”的文件
  • 4..提交文件结果包括:代码,通信后生成的txt文件

(三) 程序设计思路:

看到题首先想到的张三李四单线程通信问题,后来展开到多线程问题时怎么都不对,在书上P404多线程例题上抄写下来的,但是其中还是有很多问题,运行结果也不对

例题思路:客户输入圆的半径并发送给服务器,服务器把计算出的圆的面积返回给客户。因此可以将计算量大的工作放在服务器端,客户端负责计算量小的工作,实现客户-服务器交互计算,来完成某项任务。

(四) 代码片段:

Client_Main 代码:

复制代码
import java.io.*;
import java.net.*;
import java.util.*;
public class Client_Main {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubScanner scanner = new Scanner (System.in);Socket mysocket = null;DataInputStream in = null;DataOutputStream out = null;Thread readData;Read_Main read = null;try {mysocket = new Socket();read = new Read_Main();readData = new Thread(read);System.out.print("输入服务器的IP:");   //负责读取信息的线程String IP = scanner.nextLine();System.out.print("输入服务器的IP:");int port = scanner.nextInt();if(mysocket.isConnected()){}else{InetAddress address = InetAddress.getByName(IP);InetSocketAddress socketAddress = new InetSocketAddress(address,port);mysocket.connect(socketAddress);in = new DataInputStream(mysocket.getInputStream());out = new DataOutputStream(mysocket.getOutputStream());read.setDataInputStream(in);readData.start();       //启动负责读取信息的线程}}catch(Exception e){System.out.println("服务器已断开" +e);}System.out.println("输入圆的半径(放弃请输入N):");while(scanner.hasNext()) {double radius = 0;try {radius = scanner.nextDouble();}catch(InputMismatchException exp){System.exit(0);}    try {out.writeDouble(radius);   //向服务器发送信息}catch(Exception e) { }}}
}
复制代码

  Read_Main 代码:

复制代码
import java.io.DataInputStream;
import java.io.IOException;
public class Read_Main implements Runnable {DataInputStream in;/*** @param args*/public static void setDataInputStream(DataInputStream in) {// TODO Auto-generated method stubthis.in = in;}public void run() {double result = 0;while(true) {try { result = in.readDouble();  //读取服务器发送来的信息System.out.println("圆的面积" +result);System.out.print("输入圆的半径(放弃请输入N):");}catch (IOException e) {System.out.println("与服务器断开" +e);break;}}}
}
复制代码

  Server_Main 代码:

复制代码
import java.io.*;
import java.net.*;
import java.util.*;
public class Server_Main {public static void main(String[] args) {ServerSocket server = null;ServerThread thread;Socket you = null;while(true){try{ server = new ServerSocket(2010);}catch(IOException e1){System.out.println("正在监听");  ServerSocket对象不能重复创建}try{ System.out.println("等待客户呼叫");you = server.accept();System.out.println("客户的地址:"+you.getInetAddress());}catch(IOException e){System.out.println("正在等待客户");}if (you!=null){new ServerThread(you).start();   //为每个客户启动一个专门的线程}}}
}
class ServerThread extends Thread{Socket socket;DataOutputStream out = null;DataInputStream in = null;String s = null;ServerThread(Socket t){socket = t;try{ out = new DataOutputStream (socket.getOutputStream());in = new DataInputStream (socket.getInputStream());}catch (IOException e){}}public void run(){while (true){try{double r = in.readDouble();  //阻塞状态,除非读取到信息double area=Math.PI*r*r;out.writeDouble(area);  }catch (IOException e){System.out.println("客户离开");return;}}}
}
复制代码

(五)使用到的知识点

  • 多线程技术
  • 套接字基本原则:服务器应当启动一个专门的线程,在该线程中和客户的套接字建立连接;由于套接字的输入流在读取信息时可能发生阻塞,客户端和服务器端都需要在一个单独的线程中读取信息
  • if 条件分支语句,while 循环语句,try...catch语句块等等

(六)运行结果

(七)在编程中出错的过程,及解决问题的过程

  • Read_Main 代码中  this.in = in;  this有问题,代码参照P404多线程敲写的命令,在考核过程中未解决此问题,将会在实训时问老师;
  • 考核过程编写代码时,首先想到老师上课所讲有关于张三李四单线程通信问题,后来参照书上多线程的题进行抄写的,有些代码问题已用es...软件所解决,但是还有部分错误,运行结果也不对

(八)考核总结及其意见

  1. 通过这次考核,发现自己对于单线程展开的问题学习的不到位,导致考试多线程问题没有很好解决
  2. 通过这学期学习java课程,自己学习到很多东西,其中 if 条件分支 ,while,for,do-while循环语句,单线程通信以及SQL结构化语句等等掌握不错,但是有关于类与对象和子类与继承学习的不好,而且自己独自敲写代码很费劲,大部分语句块掌握不好,有的甚至运用不恰当
  3. 希望以后老师对于代码编程方面能够讲解的再详细点,尽量让我们多动手独自编写一些代码
  4. 在实训过程中要努力完善不足,为小组做出贡献,加油

(九)代码和博客字数统计

 

学习内容代码(行)博客(字)
java入门5行1000字
输入输出数据65行 
条件分支语句28行 
循环语句47行 
常用实用类86行 
数组92行 
类与对象,子类与继承600行 
java多线程,SQL结构化语句900行 
第一次过程性考核180行900字
第二次过程性考核650行500字
第三次过程性考核130行500字
总计2783行2900字

转载于:https://www.cnblogs.com/liuji1/p/10129413.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/463926.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

劝你不要转行

在知乎收到一个咨询,问题如下您好,想向您请教一些问题。想转行做嵌入式工程师个人基本信息29岁,电子与通信工程专业硕士,毕业后就职于某车企,主要从事类似项目管理一职。去年考入某事业单位,业余时间相对较…

linux下DHCP的安装配置

今天在整理以前的资料的时候,看到了这篇过去积攒的资料,过程详细所以拿来给大家一块分享,同时我也在做,提高一下熟练度。 【实验名称】Linux下DHCP服务的配置与安装【实验拓扑】【实验目标】了解DHCP服务的工作原理,掌…

浅谈一下嵌入式中的强符号和弱符号

__attribute__ 是一个编译器指令,其实是 GNU C 的一种机制,本质是一个编译器的指令,在声明的时候可以提供一些属性,在编译阶段起作用,来做多样化的错误检查和高级优化。用于在 C、C、Objective-C 中修饰变量、函数、参…

POJ_1862 Stripies 【贪心】

一、题面 POJ1862 二、分析 反省一下,自己英语水平着实不行,该题其实就是问若给出若干个这种生物,根据这种体重变换方式,最终合并成一个后,体重最少是多少。根据公式 $m 2\sqrt{m_{1}m_{2}}$ 我们可以发现&#xff0c…

想成为硬件工程师,难不?

有很多朋友经常会问,成为高级嵌入式系统硬件工程师,需要做到哪些呢?那么,我们就先从嵌入式硬件工程师是个什么概念入手。一、如何理解“嵌入式”的概念呢?1、从硬件上,将基于CPU的处围器件,整合到CPU芯片内部&#x…

.Net/C#中Cache的用法

Cache 即高速缓存,使用合理可以提高网站访问速度,减少服务器压力 什么是缓存?Web 应用程序通常都是被多个用户访问。一个Web站点可能存在一个“重量级”的加载,它能够使得站点在访问的时候,拖慢整个服务器。当站点被大…

Maven继承

继承为了消除重复,可以把pom 中很多相同的配置提取出来;如:grouptId, version 等。 在使用的时候子工程直接继承父工程的依赖版本号,子工程中不再需要指定具体版本号,方便统一管控项目的依赖版本问题。 创建…

电子驱蚊器就是智商税

说下我的情况我家不能烧蚊香,因为我们领导说家里有小孩,蚊香对小孩很不好,这是楠哥的锅,我不背。但是我又不喜欢挂蚊帐,总觉得蚊帐挂起来后觉得很压抑,黑乎乎的感觉。所以能不挂的时候就不挂,然…

串口通讯到底有没有累积误差及对时钟精度的要求

1. 问题背景:2. 问题分析:3. 总结:1. 问题背景: 对于嵌入式开发者来说,串口应该是应用最广泛的模块,在日常客户支持过程中经常会有客户问到一些关于串口通讯稳定性的问题,比较典型的几个问题如下:在9600波特…

《统一沟通-微软-实战》-3-部署-Exchange 2010-1-先决条件

参照: http://technet.microsoft.com/zh-CN/library/bb691354.aspx 先决条件 加域请确保林的功能级别至少为 Windows Server 2003,并确保架构主机运行 Windows Server 2003 Service Pack 1 或更高版本。有关 Windows 功能级别的详细信息,请参阅管理域和林…

写给打工人的职业发展观

转发火哥的一篇文章为什么要去一线城市打工现在网上很多这样的话题:深圳的高房价会导致人才流失吗?年轻人是不是在逃离北上广?一线城市工资是老家省会的一倍,消费,房租也比老家省会贵一倍,赚多少花多少&…

在线MSN代码(如同QQ在线咨询那种的)

在你需要显示MSN咨询的地方添加如下代码&#xff1a; <!--Msn网页在线代码开始--><a href"msnim:chat?contactabcdwxc21com.com"><img height"40"alt"msn:abcdwxc21com.com"src"msn.GIF"width"26"align&quo…

RISC-V Linux 启动流程分析

“Author: 通天塔 985400330qq.comDate: 2022/05/15Revisor: lzufalcon falcontinylab.orgProject: RISC-V Linux 内核剖析”说明&#xff1a;RISC-V Linux 内核兴趣小组旨在围绕 RISC-V 处理器架构系统地研究 Linux 内核以及上下栈中的技术&#xff0c;为国内 RISC-V 生态…

解读设计模式----单例模式(Singleton Pattern)

单例模式可以保证一个类有且只有一个实例,并提供一个访问它的全局访问点.在程序设计中,有很多情况需要确保一个类只能有一个实例.从这句话可以看出,Singleton模式的核心&#xff1a;如何控制用户使用new对一个类的实例构造器的任意调用。如何绕过常规的构造器&#xff0c;提供一…

Linux下如何搭建Java环境

软件环境 虚拟机&#xff1a;VMware Workstation系统&#xff1a;Linux&#xff1a;CentOS-7-x86_64工具&#xff1a; 安装工具&#xff1a;SSH客户端搭建步骤 1&#xff1a;查询当前系统版本 cat /proc/version2&#xff1a;首先确认当前系统是否已经存在java环境 java -vers…

程序中提升几毫秒、节省几 kB 的内存有必要吗?

我记得我上小学的时候有一篇课文&#xff0c;说是有一个人很节省&#xff0c;不仅他自己家里节省&#xff0c;如果别人家吃饭乱扔的剩饭&#xff0c;他都会去收拾起来晒干存起来。然后刚好有一年饥荒&#xff0c;大家都没有米吃了&#xff0c;他就把他那些年存起来的米给大家吃…

pthread_join()函数理解

pthread_t tid; 使用方式&#xff1a;pthread_join(tid,NULL); 为什么要使用pthread_join()&#xff1f; 在很多情况下&#xff0c;主线程生成并起动了子线程&#xff0c;如果子线程里要进行大量的耗时的运算&#xff0c;主线程往往将于子线程之前结束&#xff0c; 但是如果主…

当MCU死机了,先把硬件抓过来~

关于软件开发中的偶发性问题&#xff0c;有些处理办法看似不是很难&#xff0c;但其实最重要的还是对问题的敏感度&#xff0c;而这份敏感度就来源于你对整个系统的理解和把握。当你能够尽快缩小问题代码的范围&#xff0c;在一定程度上就已经加快了解决问题的进度。之前我曾提…

青蛙学Linux—NFS

NFS&#xff0c;Network File Syttem&#xff0c;网络文件系统。它允许网络上运行不同操作系统的主机通过网络连接到运行NFS服务的主机上&#xff0c;以实现数据共享。NFS的配置非常简单&#xff0c;经过简单的设置既能快速使用NFS。 使用NFS&#xff0c;首先在服务端运行NFS服…

extjs 学习中

首先找了个js得开发工具&#xff1a;Komodo Edit 但是安装了好多次都没有出现提示&#xff0c;均告失败&#xff01;今天再次鼓起勇气安装试试&#xff1a;首先安装Komodo-Edit-4.3.2-1263; 成功&#xff01;然后&#xff1a; 下载extjs_api_catalogs-2.0.2-ko.xpi &#xff…