java网络编程课程设计终极版
jave课程设计
jave课程设计一、课程目标知识目标:1. 理解Java基本语法和编程结构,掌握变量、数据类型、运算符、控制流程等基本概念。
2. 学会使用面向对象编程思想,理解类与对象的关系,掌握封装、继承、多态等核心概念。
3. 了解Java常用的集合框架,熟练运用数组、列表、映射等数据结构解决问题。
4. 掌握Java异常处理机制,提高程序的健壮性。
技能目标:1. 能够运用所学知识编写简单的Java程序,解决实际问题。
2. 学会使用调试工具,分析并解决程序中的错误。
3. 掌握Java编程规范,编写具有良好可读性的代码。
4. 提高团队协作能力,学会与他人共同完成项目。
情感态度价值观目标:1. 培养学生对编程的兴趣,激发学习热情。
2. 培养学生的逻辑思维能力,提高分析问题和解决问题的能力。
3. 培养学生良好的编程习惯,注重代码质量。
4. 培养学生的创新意识,鼓励尝试新方法解决问题。
课程性质:本课程为Java编程入门课程,旨在让学生掌握Java基本语法和编程技巧,培养编程兴趣和逻辑思维能力。
学生特点:学生处于初级阶段,对编程有一定兴趣,但基础薄弱,需要从基础开始逐步引导。
教学要求:注重理论与实践相结合,通过案例分析和实际操作,帮助学生掌握Java编程技能。
同时,关注学生的学习进度和个体差异,提供有针对性的指导。
在教学过程中,强调编程规范和团队协作,培养学生的职业素养。
二、教学内容1. Java基本概念与语法- 程序基本结构- 变量、数据类型与运算符- 控制流程(条件语句、循环语句)2. 面向对象编程- 类与对象- 封装、继承、多态- 抽象类与接口3. 常用集合框架- 数组- 列表、映射- 集合操作与遍历4. 异常处理- 异常类型- 异常捕获与处理- 自定义异常5. Java编程规范与调试- 代码规范- 调试方法与技巧- 优化程序性能6. 实践项目- 设计小型程序,解决实际问题- 团队协作完成项目- 代码审查与优化教学内容安排与进度:1. 第1-2周:Java基本概念与语法2. 第3-4周:面向对象编程3. 第5-6周:常用集合框架4. 第7-8周:异常处理5. 第9-10周:Java编程规范与调试6. 第11-12周:实践项目教材章节关联:1. 第一章:Java入门2. 第二章:Java基本语法3. 第三章:面向对象基础4. 第四章:高级面向对象5. 第五章:集合框架6. 第六章:异常处理7. 第七章:Java编程规范与实践教学内容确保科学性和系统性,结合教材章节进行有序安排,以适应学生的认知水平和学习进度。
JAVA课程设计精编
JAVA课程设计精编一、教学目标本节课的教学目标是让学生掌握Java编程的基本语法和结构,能够编写简单的Java程序。
具体来说,知识目标包括理解Java编程语言的基本概念,如变量、数据类型、运算符、控制结构等;技能目标包括能够使用Java编程语言编写程序,解决简单的数学问题,如计算器的实现;情感态度价值观目标包括培养学生的编程兴趣,提高学生解决问题的能力。
二、教学内容本节课的教学内容主要包括Java编程语言的基本语法和结构。
具体来说,首先介绍Java编程语言的基本概念,如变量、数据类型、运算符、控制结构等;然后通过实例演示和练习,让学生掌握这些概念的具体应用;最后,通过编写一个简单的计算器程序,让学生能够综合运用所学的知识。
三、教学方法本节课的教学方法主要包括讲授法和练习法。
首先,通过讲授法向学生介绍Java编程语言的基本概念;然后,通过练习法让学生动手实践,巩固所学的知识。
此外,还可以采用讨论法,让学生在课堂上相互交流、讨论,提高他们的编程能力。
四、教学资源本节课的教学资源主要包括教材、参考书、多媒体资料和实验设备。
教材和参考书用于为学生提供理论知识的学习,多媒体资料用于辅助讲解和展示实例,实验设备用于让学生进行动手实践。
此外,还可以利用网络资源,如在线编程平台,让学生在课后进行自主学习和练习。
五、教学评估本节课的教学评估主要包括平时表现、作业和考试三个部分。
平时表现主要评估学生在课堂上的参与程度、提问回答等情况,占总分的30%;作业主要评估学生的编程实践能力,占总分的40%;考试主要评估学生对Java编程语言基本概念的理解和应用能力,占总分的30%。
评估方式应客观、公正,能够全面反映学生的学习成果。
六、教学安排本节课的教学安排如下:共安排8个学时,每个学时45分钟。
第一学时介绍Java编程语言的基本概念,第二学时讲解变量、数据类型和运算符,第三学时讲解控制结构,第四学时讲解数组和字符串,第五学时讲解函数,第六学时讲解面向对象编程,第七学时讲解异常处理,第八学时进行课程总结和复习。
java课程设计.
java 课程设计 .一、教学目标本节课的教学目标是使学生掌握Java编程语言的基本语法和程序设计的基本思想,培养学生编写简单Java程序的能力。
具体来说,知识目标包括:1.理解Java语言的基本语法和数据类型。
2.掌握基本的控制结构和函数。
3.了解面向对象编程的基本概念。
技能目标包括:1.能够使用Java语言编写简单的程序。
2.能够利用面向对象编程思想解决实际问题。
情感态度价值观目标包括:1.培养学生对编程语言的兴趣和好奇心。
2.培养学生解决问题的能力和团队合作精神。
二、教学内容本节课的教学内容主要包括Java语言的基本语法、数据类型、控制结构和函数。
具体安排如下:1.介绍Java语言的基本语法和编程环境。
2.讲解Java的数据类型,包括整数类型、浮点类型、布尔类型等。
3.介绍控制结构,包括条件语句和循环语句。
4.讲解Java的函数,包括函数的定义和调用。
5.引入面向对象编程的基本概念,如类、对象、封装等。
三、教学方法为了激发学生的学习兴趣和主动性,本节课将采用多种教学方法。
具体包括:1.讲授法:教师讲解Java语言的基本语法和编程环境。
2.案例分析法:通过分析具体的Java程序案例,使学生理解数据类型、控制结构和函数的使用。
3.实验法:学生动手编写Java程序,巩固所学知识。
4.讨论法:学生分组讨论面向对象编程的概念,分享学习心得。
四、教学资源为了支持教学内容和教学方法的实施,本节课将准备以下教学资源:1.教材:选用《Java编程思想》作为主要教材,为学生提供系统的学习材料。
2.参考书:提供《Java核心技术》等参考书籍,供学生深入学习。
3.多媒体资料:制作PPT课件,生动展示Java编程的相关概念。
4.实验设备:为学生提供计算机和网络环境,进行Java编程实践。
五、教学评估为了全面、客观地评估学生的学习成果,本节课将采用多种评估方式。
具体包括:1.平时表现:观察学生在课堂上的参与程度、提问回答等情况,了解学生的学习态度和理解程度。
java课程设计.docx
java课程设计.docx一、教学目标本章节的教学目标分为三个部分:知识目标、技能目标和情感态度价值观目标。
知识目标:通过本章节的学习,学生需要掌握Java编程的基本语法、数据类型、控制结构、函数等基础知识。
技能目标:学生能够运用Java编程解决简单的实际问题,具备基本的编程能力。
情感态度价值观目标:培养学生对编程的兴趣和热情,提高学生解决问题的能力。
二、教学内容本章节的教学内容主要包括Java编程的基本语法、数据类型、控制结构、函数等基础知识。
具体包括以下内容:1.Java编程的基本语法和规则2.数据类型:整数类型、浮点类型、字符类型、布尔类型等3.控制结构:顺序结构、选择结构、循环结构等4.函数:定义和调用函数,传递参数,返回值等5.常用内置函数:数学函数、字符串函数等三、教学方法本章节的教学方法采用讲授法、案例分析法和实验法相结合的方式进行。
1.讲授法:通过讲解和示范,让学生掌握Java编程的基本语法和规则,以及数据类型、控制结构、函数等基础知识。
2.案例分析法:通过分析实际案例,让学生学会如何运用Java编程解决实际问题。
3.实验法:通过上机实验,让学生动手实践,巩固所学知识,提高编程能力。
四、教学资源本章节的教学资源包括教材、参考书、多媒体资料和实验设备等。
1.教材:选用权威、实用的Java编程教材,如《Java核心技术》等。
2.参考书:提供相关的Java编程参考书籍,如《Java编程思想》等。
3.多媒体资料:制作精美的PPT课件,提供Java编程相关的视频教程等。
4.实验设备:确保学生有足够的计算机设备进行上机实验。
五、教学评估本章节的教学评估主要包括平时表现、作业和考试三个部分,以全面、客观、公正地评估学生的学习成果。
1.平时表现:通过课堂参与、提问、讨论等方式,评估学生在课堂上的学习态度和表现。
2.作业:布置适量的作业,评估学生的知识掌握和运用能力。
3.考试:进行定期的考试,评估学生对章节知识的全面理解和掌握程度。
java网络与课程设计
java网络与课程设计一、课程目标知识目标:1. 让学生掌握Java网络编程的基本概念,理解网络通信原理,掌握TCP/IP协议和套接字编程;2. 培养学生运用Java语言进行网络应用程序设计和开发的能力,熟悉常用的网络编程API;3. 引导学生了解网络信息安全的基本知识,提高网络安全意识。
技能目标:1. 培养学生具备独立设计和实现简单网络应用程序的能力;2. 提高学生运用所学知识解决实际网络编程问题的能力;3. 培养学生具备良好的编程习惯,能编写出结构清晰、可读性强的代码。
情感态度价值观目标:1. 激发学生对网络编程的兴趣,培养其主动探索和创新的意识;2. 培养学生具备团队协作精神,学会与他人共同解决问题;3. 增强学生的网络安全意识,使其在网络世界中具备正确的价值观和行为准则。
课程性质:本课程为实践性较强的课程,旨在培养学生的实际编程能力和网络编程思维。
学生特点:学生具备一定的Java基础,对网络编程有一定了解,但实际操作能力有待提高。
教学要求:注重理论与实践相结合,充分调动学生的主观能动性,鼓励学生动手实践,培养其解决实际问题的能力。
教学过程中,关注学生的个体差异,提供有针对性的指导,确保课程目标的达成。
将课程目标分解为具体的学习成果,以便进行教学设计和评估。
二、教学内容1. 网络编程基本概念:介绍网络编程的基本原理,包括网络模型、协议、IP地址、端口号等,关联课本第二章。
2. TCP/IP协议:详细讲解TCP和UDP协议的特点、工作原理及应用场景,结合课本第三章进行教学。
3. 套接字编程:教授Java中Socket编程的基本方法,包括客户端和服务器端的创建与通信,参考课本第四章。
4. 网络应用程序设计:分析实际案例,引导学生设计并实现简单的网络应用程序,如聊天室、文件传输等,结合课本第五章。
5. 网络安全:介绍网络安全的基本概念,如加密、认证、防范网络攻击等,以增强学生的网络安全意识,关联课本第六章。
java课程设计_
java课程设计_一、教学目标本课程旨在通过学习Java编程语言,使学生掌握Java编程的基本语法、面向对象编程思想以及常用数据结构;培养学生运用Java语言解决实际问题的能力;并通过对Java编程的实践,培养学生的逻辑思维能力、创新能力和团队合作意识。
具体来说,知识目标包括:1.理解Java编程语言的基本语法和编程规范。
2.掌握Java中的基本数据类型、运算符、控制语句。
3.理解面向对象编程的基本概念,如类、对象、封装、继承和多态。
4.熟悉Java中的常用数据结构,如数组、链表、树和图。
技能目标包括:1.能够使用Java编写简单的程序,实现基本的输入输出、计算等功能。
2.能够运用面向对象编程思想,设计并实现具有一定复杂度的程序。
3.能够运用Java中的数据结构,解决实际问题。
情感态度价值观目标包括:1.培养学生对编程语言的兴趣,激发学生的学习热情。
2.培养学生的逻辑思维能力,提高学生分析问题和解决问题的能力。
3.培养学生的团队合作意识,提高学生的沟通协作能力。
二、教学内容本课程的教学内容主要包括Java编程语言的基本语法、面向对象编程思想和常用数据结构。
1.Java编程语言的基本语法:介绍Java编程语言的基本数据类型、运算符、控制语句等。
2.面向对象编程:讲解类、对象、封装、继承和多态等基本概念,并通过实例让学生深刻理解面向对象编程思想。
3.常用数据结构:介绍数组、链表、树和图等数据结构的基本概念和应用,并通过实例让学生学会运用数据结构解决实际问题。
三、教学方法为了提高教学效果,本课程将采用多种教学方法相结合的方式进行教学。
1.讲授法:通过讲解Java编程语言的基本语法、面向对象编程思想和常用数据结构,使学生掌握相关知识。
2.案例分析法:通过分析实际案例,使学生更好地理解Java编程语言的应用和面向对象编程思想。
3.实验法:安排实验课程,让学生动手编写Java程序,巩固所学知识,培养学生的实际编程能力。
jav课程设计
jav课程设计一、教学目标本课程旨在通过Java编程语言的学习,让学生掌握Java编程的基本语法、概念和编程技巧,培养学生解决问题的能力,提高学生的逻辑思维和编程实践能力。
1.理解Java编程语言的基本语法和概念。
2.掌握Java编程的基本技巧和编程方法。
3.了解Java编程语言的应用领域和发展趋势。
4.能够使用Java编程语言编写简单的程序。
5.能够运用Java编程语言解决实际问题。
6.能够阅读和理解Java编程语言的代码。
情感态度价值观目标:1.培养学生对编程语言的兴趣和热情。
2.培养学生解决问题的积极性和主动性。
3.培养学生团队合作和自主学习的能力。
二、教学内容本课程的教学内容主要包括Java编程语言的基本语法、概念和编程技巧。
具体包括以下几个方面:1.Java编程语言的基本语法和概念,如变量、数据类型、运算符、控制语句等。
2.Java编程的基本技巧和编程方法,如函数、面向对象编程、异常处理等。
3.Java编程语言的应用领域和发展趋势,如Web开发、移动应用开发等。
4.课程简介和教学目标5.Java编程语言的基本语法和概念6.Java编程的基本技巧和编程方法7.Java编程语言的应用领域和发展趋势三、教学方法本课程将采用多种教学方法,以激发学生的学习兴趣和主动性。
具体包括以下几种方法:1.讲授法:通过教师的讲解,让学生理解Java编程语言的基本语法和概念。
2.讨论法:通过学生之间的讨论和交流,培养学生的团队合作和解决问题的能力。
3.案例分析法:通过分析实际案例,让学生掌握Java编程的技巧和方法。
4.实验法:通过编程实践,让学生巩固Java编程的知识和提高编程能力。
四、教学资源本课程将使用教材《Java编程语言》作为主要教学资源,同时提供以下教学资源:1.参考书籍:提供相关的参考书籍,供学生深入学习和参考。
2.多媒体资料:提供相关的视频教程和教学课件,帮助学生更好地理解和掌握Java编程知识。
Java网络编程实践课程设计
J a v a网络编程实践课程设计说明书课程名称:Java网络编程课程设计题目:基于C/S的学生信息管理姓名:学号:教学班号:指导教师:王小刚兰州交通大学软件科学与工程系二○13 年12 月27 日任务书实现应用,可以通过网络在客户端对存放在服务器端的学生信息表(至少包含学号、姓名、性别、年龄、籍贯等字段)学生纪录增、删、改、查,并返回结果。
要能通过菜单选择功能。
基于Socket,多客户端使用多线程,以能同时从多个客户端执行功能。
必须提供友好直观、布局合理的图形界面选择功能、显示信息和填写修改信息。
成员及分工列表图形界面设计者:数据库设计者:Socket设计者:多线程设计者:项目简述和目的熟悉JAVA 语法,掌握图形化界面、多线程、网络、数据库等综合编程,掌握用编程语言开发由若干功能组成的小型项目的基本流程,增强动手实践能力,巩固和加强书本知识的学习,体会JAVA编程的特点。
解题基本思路设计的信息管理系统中的窗体部分,没有使用菜单,而是按钮。
菜单虽然简单,方便,但我认为在窗体里运用按钮是有必要的,这样可以方便添加、删除,修改等动作,通过一步步地做,慢慢的集合,比较的清晰,还显得比较的有层次感. 利用Swing设计图形界面利用Access表设计数据库,利用socket设计网络信息管理模块分析和设计学生管理系统要实现查询,添加,删除,显示,修改等功能。
查询不存在要报错,添加相同也要报错,删除不存在的号也要报错,修改不成功也要报错。
如果成功的话也要提示。
而且每一步都要密码才能进行操作,否则报错提醒!主要程序源代码Client源代码package socket;import java.io.*;import .*;import java.awt.*;import javax.swing.*;import java.awt.event.*;class Client extends JFrame implements ActionListener//登入界面功能是输入正确的账号和密码才能进入,错误的话返回错误提示!{private JLabel usernameLabel;//帐号private JLabel a;//标题private JTextField usernameTextField;//帐号文本框private JLabel passwordLabel;//密码private JPasswordField passwordField;//密码文本框private JButton button1;//确定按钮private JButton button2;//取消按钮public Client(){super.setTitle("登录界面");Container c=getContentPane();c.setLayout(null);a=new JLabel("欢迎进入学生登入系统!");a.setBounds(50,30,300,30);a.setFont(new Font("黑色",Font.BOLD,25));usernameLabel=new JLabel("账号");usernameLabel.setBounds(50,90,170,30);usernameLabel.setFont(new Font("黑色",Font.BOLD,30));usernameTextField=new JTextField(); usernameTextField.setBounds(150,90,170,30); usernameTextField.setFont(new Font("宋体",Font.BOLD,20)); passwordLabel=new JLabel("密码:"); passwordLabel.setBounds(50,120,170,30); passwordLabel.setFont(new Font("黑色",Font.BOLD,30)); passwordField=new JPasswordField(); passwordField.setBounds(150,120,170,30); passwordField.setFont(new Font("黑色",Font.BOLD,30)); passwordField.setEchoChar('*');button1=new JButton();button1.setText("进入");button1.setFont(new Font("黑色",Font.BOLD,20));button1.setBounds(50,160,100,30);button2=new JButton();button2.setText("退出");button2.setFont(new Font("黑色",Font.BOLD,20));button2.setBounds(220,160,100,30);button1.addActionListener(this);//按钮监听button2.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){System.exit(0);}});c.add(passwordLabel);c.add(passwordField);c.add(usernameLabel);c.add(button1);c.add(button2);c.add(usernameTextField);c.add(a);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setSize(400,300);setLocation(322,30);setVisible(true);}private void showText()//登入失败消息框{String xie;xie=usernameTextField.getText();JOptionPane.showMessageDialog(this.getParent(),"登入失败!"+xie);}private void showText1()//登入成功消息框{String xie;xie=usernameTextField.getText();JOptionPane.showMessageDialog(this.getParent(),"登入成功!"+xie);}public void actionPerformed(ActionEvent e)//按钮监听事件{Socket ssocket = null;String st1,st2,st3;final PrintWriter writer1;st1=usernameTextField.getText();st2=passwordField.getText();st3="进入"+","+st1+","+st2;//把帐号和密码打包成字符串try{ssocket=new Socket("localHost",10000);//创建socketwriter1=new PrintWriter(ssocket.getOutputStream());//发送给服务器!if(!(st1.equals(null)) && !(st2.equals(null)))//判断是否为空{writer1.println(st3);writer1.flush();}else if(st1.equals(null) || st2.equals(null))//判断是否为空{writer1.println("error1");writer1.flush();}BufferedReader read=new BufferedReader(new InputStreamReader(ssocket.getInputStream()));String s_red=null;System.out.println("please wait.......");while(true){s_red=read.readLine();if(s_red!=null)break;}if(s_red.equals("yes"))//读取服务端的内容,如果是yes执行Client1的类{showText1();dispose();new Client1();}else//读取服务端的内容,如果不是yes执行showText()报错提醒!{showText();usernameTextField.setText(null);passwordField.setText(null);}}catch (Exception e1){e1.printStackTrace();}}public static void main(String[] args)throws IOException{Client s=new Client();}}class Client1 extends JFrame //登录界面的类包含查询,删除,增添,修改,返回等按钮!共4个按钮监听对象!{private JButton button1,button2,button3,button4,button5,button6;public Client1(){super.setTitle("登录界面");Container c=getContentPane();setLayout(null);button1=new JButton();button1.setText("查询");button1.setFont(new Font("黑色",Font.BOLD,20));button1.setBounds(50,50,120,50);button2=new JButton();button2.setText("删除");button2.setFont(new Font("黑色",Font.BOLD,20));button2.setBounds(220,50,120,50);button3=new JButton();button3.setText("增添");button3.setFont(new Font("黑色",Font.BOLD,20));button3.setBounds(50,150,120,50);button4=new JButton();button4.setText("修改");button4.setFont(new Font("黑色",Font.BOLD,20));button4.setBounds(220,150,120,50);button5=new JButton();button5.setText("显示");button5.setFont(new Font("黑色",Font.BOLD,20));button5.setBounds(50,250,120,50);button6=new JButton();button6.setText("返回");button6.setFont(new Font("黑色",Font.BOLD,20));button6.setBounds(220,250,120,50);button1.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){dispose();new Client2();}});button2.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){dispose();new Client4();}});button3.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){dispose();new Client3();}});button4.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){dispose();new Client5();}});button5.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){dispose();new Client6();}});button6.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){dispose();new Client();}});c.add(button1);c.add(button2);c.add(button3);c.add(button4);c.add(button5);c.add(button6);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setSize(400,450);setLocation(322,30);setVisible(true);}public static void main(String[] args)//throws IOException {new Client1();}}class Client2 extends JFrame implements ActionListener//查询类的功能是输入学号和密码,如果正确则返回成功的提醒,如果失败则返回失败的提醒,如果该学好存在,则返回存在的提醒!{private JLabel usernameLabel1;private JLabel usernameLabel2;private JLabel usernameLabel3;private JLabel usernameLabel4;private JLabel usernameLabel5;private JLabel usernameLabel6;private JLabel usernameLabel7;private JLabel usernameLabel8;private JTextField usernameTextField1;private JTextField usernameTextField2;private JTextField usernameTextField3;private JTextField usernameTextField4;private JTextField usernameTextField5;private JTextField usernameTextField6;private JTextField usernameTextField7;private JTextField usernameTextField8;private JButton button1;private JButton button2;private JLabel label1;public Client2(){super.setTitle("学生操作界面");Container c=getContentPane();c.setLayout(null);label1=new JLabel("欢迎进入学生查询系统!");label1.setBounds(40,20,400,30);label1.setFont(new Font("黑色",Font.BOLD,35));usernameLabel1=new JLabel("查询号");usernameLabel1.setBounds(70,110,200,30);usernameLabel1.setFont(new Font("黑色",Font.BOLD,30));usernameTextField1=new JTextField();usernameTextField1.setFont(new Font("宋体",Font.BOLD,30)); usernameLabel2=new JLabel("密码:");usernameLabel2.setBounds(70,150,200,30); usernameLabel2.setFont(new Font("黑色",Font.BOLD,32)); usernameTextField2=new JTextField(); usernameTextField2.setBounds(170,150,200,30); usernameTextField2.setFont(new Font("黑色",Font.BOLD,30)); usernameLabel3=new JLabel("性别:");usernameLabel3.setFont(new Font("黑色",Font.BOLD,32)); usernameLabel3.setBounds(70,190,200,30); usernameTextField3=new JTextField(); usernameTextField3.setBounds(170,190,200,30); usernameTextField3.setFont(new Font("黑色",Font.BOLD,30)); usernameLabel4=new JLabel("籍贯:");usernameLabel4.setBounds(70,230,200,30); usernameLabel4.setFont(new Font("黑色",Font.BOLD,30)); usernameTextField4=new JTextField(); usernameTextField4.setBounds(170,230,200,30); usernameTextField4.setFont(new Font("黑色",Font.BOLD,30)); usernameLabel5=new JLabel("专业:"); usernameLabel5.setBounds(70,270,200,30); usernameLabel5.setFont(new Font("黑色",Font.BOLD,30)); usernameTextField5=new JTextField(); usernameTextField5.setBounds(170,270,200,30); usernameTextField5.setFont(new Font("黑色",Font.BOLD,30)); usernameLabel6=new JLabel("姓名:"); usernameLabel6.setBounds(70,310,200,30); usernameLabel6.setFont(new Font("黑色",Font.BOLD,30)); usernameTextField6=new JTextField(); usernameTextField6.setBounds(170,310,200,30); usernameTextField6.setFont(new Font("黑色",Font.BOLD,30)); usernameLabel7=new JLabel("电话:");usernameLabel7.setBounds(70,350,200,30); usernameLabel7.setFont(new Font("黑色",Font.BOLD,30)); usernameTextField7=new JTextField();usernameTextField7.setFont(new Font("宋体",Font.BOLD,30)); usernameLabel8=new JLabel("QQ:");usernameLabel8.setBounds(70,390,200,30); usernameLabel8.setFont(new Font("黑色",Font.BOLD,30)); usernameTextField8=new JTextField(); usernameTextField8.setBounds(170,390,200,30); usernameTextField8.setFont(new Font("宋体",Font.BOLD,30)); button1=new JButton();button1.setText("查询");button1.setFont(new Font("黑色",Font.BOLD,30));button1.setBounds(60,470,130,40);button2=new JButton();button2.setText("返回");button2.setFont(new Font("黑色",Font.BOLD,30));button2.setBounds(270,470,130,40);c.add(usernameLabel1);c.add(usernameLabel2);c.add(usernameLabel3);c.add(usernameLabel4);c.add(usernameLabel5);c.add(usernameLabel6);c.add(usernameLabel7);c.add(usernameLabel8);c.add(button1);c.add(button2);c.add(usernameTextField1);c.add(usernameTextField2);c.add(usernameTextField3);c.add(usernameTextField4);c.add(usernameTextField5);c.add(usernameTextField6);c.add(usernameTextField7);c.add(usernameTextField8);c.add(label1);button1.addActionListener(this);button2.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){dispose();new Client1();}});setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setSize(470,580);setLocation(322,30);setVisible(true);}public static void main(String[] args){Client2 s=new Client2();}private void showText(){String xie;xie=usernameTextField1.getText();JOptionPane.showMessageDialog(this.getParent(),"查询成功!"+xie);}private void showText2(){String xie;xie=usernameTextField1.getText();JOptionPane.showMessageDialog(this.getParent(),"该号不存在!"+xie);}public void actionPerformed(ActionEvent e){Socket ssocket = null;String str, st1,st2;final PrintWriter writer1;st1=usernameTextField1.getText();st2=usernameTextField2.getText();str="查询"+","+st1+","+st2;try{ssocket=new Socket("localHost",10000);writer1=new PrintWriter(ssocket.getOutputStream());if(!(st1.equals(null)) && !(st2.equals(null))){writer1.println(str);writer1.flush();}else if(st1.equals(null) || st2.equals(null)){writer1.println("error1");writer1.flush();}BufferedReader read=new BufferedReader(new InputStreamReader(ssocket.getInputStream()));String line=null;System.out.println("please wait.......");line=read.readLine();if(line.equals("Not1")){showText2();usernameTextField1.setText(null);usernameTextField2.setText(null);usernameTextField3.setText(null);usernameTextField4.setText(null);usernameTextField5.setText(null);usernameTextField6.setText(null);usernameTextField7.setText(null);usernameTextField8.setText(null);}else{String sarry[]=line.split(","); //usernameTextField1.setText(sarry[1]);usernameTextField2.setText(sarry[2]);usernameTextField3.setText(sarry[3]);usernameTextField4.setText(sarry[4]);usernameTextField5.setText(sarry[5]);usernameTextField6.setText(sarry[6]);usernameTextField7.setText(sarry[7]);usernameTextField8.setText(sarry[8]);showText();}}catch (Exception e1){e1.printStackTrace();}}}Server的源代码package socket;import java.io.*;import .*;import java.sql.*;public class Server //Server类通过引用来实现多线程{public static void main(String args[]){Thread1 s=new Thread1();s.start();}}class Thread1 extends Thread//多线程类{static ServerSocket server;static Socket ssocket;static BufferedReader reader1;static BufferedReader reader2;static String sql, databack;static Stringid,password,address,myname,class1,QQ,phone,sex,school;static ResultSet rs; static Statement stmt; static Connection conn;public void run()//多线程的run()方法{try{final Stringdb_driver="sun.jdbc.odbc.JdbcOdbcDriver"; //连接多线程!final String db_url="jdbc:odbc:Driver= {Microsoft Access Driver (*.mdb, *.accdb)};DBQ=d:/my1.mdb";try{}catch(Exception e){e.printStackTrace();}try{server=new ServerSocket(10000);//建立端口System.out.println("服务器已经创建!等待客户机的链接.......");int flag=0;int flag1=0;while(true){ssocket=server.accept();//连接客户端System.out.println("完成链接!");reader1=new BufferedReader(new InputStreamReader(ssocket.getInputStream()));PrintWriter writer2=newPrintWriter(ssocket.getOutputStream());String s1=reader1.readLine();String sarry[]=s1.split(",");sql="select*from one";//连接数据库中的表名Class.forName(db_driver);conn=DriverManager.getConnection (db_url,"","");if(conn!=null){System.out.println("数据库已连接.....");}else{System.out.println("连接失败!");}stmt=conn.createStatement();rs=stmt.executeQuery(sql);if(sarry[0].equals("进入"))//获取客户端的进入功能{while(rs.next()){id=rs.getString("ID"); password=rs.getString("password");if(sarry[1].equals(id) && sarry[2].equals(password)){intnumber1=Integer.parseInt(id);intnumber2=Integer.parseInt(password);if(number1==201211016 && number2==16){flag=1;break;}}}if(flag==1){writer2.println ("yes");writer2.flush();flag=0;}else{writer2.println ("no");writer2.flush();}stmt.close();conn.close();}else if(sarry[0].equals("查询"))//获取客户端的查询功能{while(rs.next()){school=rs.getString("school");id=rs.getString("ID");password=rs.getString("password");sex=rs.getString("sex");address=rs.getString("address");class1=rs.getString("class");myname=rs.getString("myname");phone=rs.getString("phone");QQ=rs.getString("QQ");if(sarry[1].equals(id) && sarry[2].equals(password)){flag1=1;break;}}if(flag1==1){rs.next();String A[]={school,id,password,sex,address,class1,myname,phone,QQ}; databack="";for(int i=0;i<=A.length-1;i++){databack+=A[i];if(i!=A.length-1)databack+=",";}writer2.println (databack);writer2.flush();flag1=0;}else{writer2.println ("Not1");writer2.flush();}stmt.close();conn.close();}else if(sarry[0].equals("添加"))//获取客户端的添加功能{int boolean1=0;while(rs.next()){id=rs.getString ("ID");if(sarry[1].equals(id)){boolean1=0;break;}else{String s="insert intoone(ID,password,sex,address,class,myname,phone,QQ) values (?,?,?,?,?,?,?,?)";PreparedStatement stat1=conn.prepareStatement(s);stat1.setString(1,sarry[1]);stat1.setString(2,sarry[2]);stat1.setString(3,sarry[3]);stat1.setString(4,sarry[4]);stat1.setString(5,sarry[5]);stat1.setString(6,sarry[6]);stat1.setString(7,sarry[7]);stat1.setString(8,sarry[8]);stat1.executeUpdate();boolean1=1;break;}}if(boolean1==1){writer2.println("Y");writer2.flush();boolean1=0;}else{writer2.println("No11");writer2.flush();}stmt.close();conn.close();}else if(sarry[0].equals("删除"))//获取客户端的删除功能{while(rs.next()){id=rs.getString ("ID");if(sarry[1].equals(id)){Strings="delete from one where ID=?"; PreparedStatement stat1=conn.prepareStatement(s);stat1.setString(1,sarry[1]);stat1.executeUpdate();flag=1;}}if(flag==1){writer2.println("Y");writer2.flush();flag=0;}else{writer2.println("N");writer2.flush();}stmt.close();conn.close();}else if(sarry[0].equals("修改")){sex=sarry[3];address=sarry[4];class1=sarry[5];myname=sarry[6];phone=sarry[7];QQ=sarry[8];while(rs.next()){Stringid1=rs.getString("ID"); String password1=rs.getString ("password");if(sarry[9].equals(id1) && sarry[10].equals(password1)){flag=1;break;}}if(flag==1){String id2=sarry[9];id=sarry[1];password=sarry[2];String s="update one setpassword=?,sex=?,address=?,class=?,myname=?,phone=?,QQ=?,ID=? where ID=?";PreparedStatement stat1=conn.prepareStatement(s);stat1.setString(1,password);stat1.setString(2,sex);stat1.setString(3,address);stat1.setString(4,class1);stat1.setString(5,myname);stat1.setString(6,phone);stat1.setString(8,id);stat1.setString(9,id2);stat1.executeUpdate();writer2.println("Y2");writer2.flush();flag=0;}else{writer2.println("N2");writer2.flush();}stmt.close();conn.close();}else if(sarry[0].equals("显示")){Statement stmt1 = conn.createStatement();ResultSet rs1 =stmt1.executeQuery("select * from one");databack="";while(rs1.next()){StringStringpassword=rs1.getString("password");Stringsex=rs1.getString("sex");Stringaddress=rs1.getString("address");Stringclass1=rs1.getString("class");Stringmyname=rs1.getString("myname");Stringphone=rs1.getString("phone");StringQQ=rs1.getString("QQ");String xie=id+","+password+","+sex+","+address+","+class1+","+myname +","+phone+","+QQ+",";databack+=xie;flag1=1;}if(flag1==1){writer2.println (databack);writer2.flush();flag1=0;}else{writer2.println ("Not1");writer2.flush();}stmt.close();conn.close();}}}catch(Exception e){}finally{System.out.println("链接发生错误,请重试!");}try{if(reader1!=null){reader1.close();}if(ssocket!=null){ssocket.close();}}catch(Exception e1){}}catch(Exception e){System.out.println("false");}}}运行截图总结和体会经过本人的努力,学生管理系统终于做完了,经过这次课程设计,自己总结了这个学生信息管理系统的一些问题,不过收获还是颇为丰富的,再有理论知识上结合实践,使我学到了更多。
JAVA网络 编程课程设计
将所编写好的GUI进行截图放于课程设计文档中;
画出类图,流程图等说明程序运行的流程以及类之 间的关系;
对本次课程设计进行一下总结和展望。
课程设计要求
4、答辩:第十六周周四以小组为单位进行;
5、提交材料:设计报告文档打印稿,设计报告文档
电子版和源程序,统一交给学习委员。 提交时间:
第十六周周四。
功能要求:
1)利用GUI 实现聊天; 2)实现多人聊天; 3)实现私聊。
课程设计参考选题
3、设备管理系统
功能要求:
1) 实现设备的录入、删除、修改等基本操作。
2) 能够对设备进行方便的检索。 3) 实现设备折旧计算。银行储蓄系统 功能要求: 1) 实现储户开户登记; 2) 办理定期存款帐; 3) 办理定期取款手续; 4) 办理活期存款帐; 5) 办理活期取款手续; 6) 实现利息计算; 7) 输出明细表。
课程设计参考选题
16、ATM柜员机模拟程序 参考界面:
课程设计参考选题
16、ATM柜员机模拟程序 功能要求:模拟ATM取款机程序。开始设定几个银行用户, 保存在数据库中,构造一个GUI的登录界面,当输入给定的 卡号和密码与从user.txt文件中提取的数据一正确时,就进入 主界面,在主界面下,用户可以完成以下功能: 1)查询余额。 2)ATM取款:每次取款金额为100的倍数,总额不超过5000 元,支取金额不允许透支。 3)ATM存款:不能出现负存款。 4)修改密码:新密码长度不小于6位,只有输入的旧密码正 确,新密码两次输入相同的情况下才可以成功修改密码。
课程设计参考选题
13、超市会员管理系统 功能要求: 1)加入会员基本条件维护,包括:成为会员的基本 条件、优惠政策、优惠时间等 2)会员的基本信息,包括姓名、性别、年龄、工作 单位、联系方式等 3)会员购物信息:购买物品编号、物品名称、所属 种类,数量,价格等 4)会员返利信息,包括会员积分的情况,享受优惠 的等级等
Java程序设计之网络编程课程设计
Java程序设计之网络编程课程设计一、概述网络编程是Java程序设计中的重要组成部分,是实现分布式计算的核心技术。
本文将介绍Java程序设计中的网络编程知识,并以课程设计为案例,对相关知识进行深入探讨。
二、网络编程基础知识Java程序中实现网络编程需要掌握以下基础知识:2.1 网络相关类Java提供了很多网络相关的类,包括Socket、ServerSocket、DatagramPacket、DatagramSocket等。
其中,Socket和ServerSocket 用于TCP协议的通信,而DatagramPacket和DatagramSocket用于UDP 协议的通信。
2.2 TCP协议TCP协议是面向连接的可靠数据传输协议。
在Java中,使用Socket和ServerSocket类来实现TCP协议的通信。
Socket类表示网络上的一个点,它的构造方法如下:public Socket(InetAddress address,int port)其中,address是目标主机的IP地址,port是端口号。
连接成功后,可以通过Socket对象的InputStream和OutputStream来进行数据的读写操作。
ServerSocket类表示服务器端的Socket,它的构造方法如下:public ServerSocket(int port)其中,port是服务器端的端口号。
当有客户端Socket连接到该端口时,ServerSocket类会创建一个Socket对象,并通过它进行数据的读写操作。
2.3 UDP协议UDP协议是无连接的不可靠数据传输协议。
在Java中,使用DatagramPacket和DatagramSocket类来实现UDP协议的通信。
DatagramPacket类表示UDP协议中的数据包,它的构造方法如下:public DatagramPacket(byte[] buf,int length,InetAddress address,int port)其中,buf是数据缓存区,length是数据长度,address是目标主机的IP地址,port是端口号。
Java网络编程基础课程设计
Java网络编程基础课程设计引言随着互联网的发展,网络编程已经成为现代编程领域中不可或缺的一部分。
Java作为一门面向对象的编程语言,其网络编程方面也备受青睐。
在本课程设计中,我们将学习Java网络编程的基础知识,了解Java Socket编程的基本原理和使用方法,并通过编写简单的聊天室程序来巩固所学知识。
学习目标1.理解Java Socket编程的基本原理及其对网络编程的重要性;2.掌握Java Socket编程的基础知识和使用方法;3.通过编写Java聊天室程序,巩固Java Socket编程的实现和应用。
课程内容1. Java Socket编程基础知识1.1 Socket的基本概念Socket是建立在TCP/IP协议栈之上的一种网络通信协议,它是网络上实现通信过程中的一个必要的工具。
Socket在客户端和服务器之间建立一个连接通道,使得两者之间可以进行流式数据传输。
在Java中,Socket通常可以分为ServerSocket和Socket两种类型。
1.2 Socket编程的基本原理Java中的Socket编程基于客户端/服务器模型,其基本原理是:1.客户端向服务器发送请求;2.服务器接收请求,并返回响应;3.客户端接收响应,完成数据传输。
1.3 Socket编程的优势和局限性Socket编程的优势在于:1.可以实现异步、并发访问,提高网络通信效率;2.可以实现双向通信,满足多个客户端同时与服务器交互的需求。
Socket编程的局限性在于:1.容易受到网络环境的影响,例如延迟、丢包等问题;2.容易受到网络攻击,例如拒绝服务攻击等问题。
2. Java Socket编程基础应用2.1 ServerSocket和Socket的使用在Java中,ServerSocket和Socket是实现Socket编程的两种基础工具。
其中,ServerSocket用于监听客户端请求,Socket用于与服务器建立连接并进行数据交换。
JAVA程序设计之网络编程教学设计
JAVA程序设计之网络编程教学设计本文将从网络编程的概念、特点和应用范围入手,探讨网络编程在JAVA程序设计中的重要性,并针对此背景下的学生特点和教学目标,设计一套完整的网络编程教学方案。
什么是网络编程?网络编程是指在计算机网络上进行通信和数据交换的过程中编写程序的技术和过程。
在现代信息化时代,网络编程应用广泛,例如HTTP 协议、FTP协议、SMTP协议等,都是基于网络编程技术实现的。
网络编程特点:1.网络编程具有高并发性。
多个用户可以同时连接和响应,可以实现高效率的网络通信。
2.网络编程采用分布式结构。
网络中的多个计算机可以相互协作,完成分布式计算,使得网络运用更具有优越性。
3.网络编程安全性要求更高。
数据加密、身份验证等技术被广泛应用于网络编程中,以加强数据交换安全性。
JAVA程序设计中网络编程的重要性JAVA程序设计是当今计算机科学教育领域中最受欢迎的语言之一,JAVA语言在众多领域中应用广泛,其中包括网络编程。
JAVA程序设计中网络编程的重要性主要体现在以下几个方面:1.网络编程是JAVA程序设计的重要应用。
在如今的计算机网络环境下进行编程,需要具备网络编程的基本知识和技能。
2.网络编程技术能够提高程序设计效率。
通过网络编程技术,可以实现客户端和服务器之间的通信,并能够快速处理大量信息。
3.网络编程可以为JAVA程序带来更广阔的应用范围。
通过网络编程的技术和方法来设计软件,可以使JAVA程序更加灵活多变,并能够更加方便地应用于不同的领域。
面向学生特点的网络编程教学设计推动计算机教育改革,实现计算机教育的快速发展,对于教学方法的创新提出了更高的要求。
针对学生在网络编程学习中可能遇到的问题,本文提出了以下教学思路:1.突出实践性。
将网络编程的讲解和实践环节相结合,使学生在实践中更好地理解和掌握知识点,同时培养学生的创新能力。
2.动手实现项目。
让学生通过设计并实现网络编程项目,来激发学生的兴趣和动力,使学生在实践中体验到乐趣。
java编程课程设计
java编程课程设计一、教学目标本课程的目标是让学生掌握Java编程的基本概念、语法和编程技巧,培养学生独立思考和解决问题的能力,以及培养学生的团队合作意识和创新精神。
具体目标如下:1.掌握Java编程语言的基本语法和结构。
2.理解面向对象编程的基本概念和方法。
3.熟悉Java编程语言的常用类库和API。
4.能够使用Java编程语言编写简单的程序。
5.能够运用面向对象编程的思想解决实际问题。
6.能够使用Java编程语言进行调试和优化程序。
情感态度价值观目标:1.培养学生对编程的兴趣和热情,提高学生自我学习的动力。
2.培养学生团队合作意识和沟通能力,培养学生的团队协作能力。
3.培养学生创新精神和解决问题的能力,培养学生的独立思考能力。
二、教学内容本课程的教学内容主要包括Java编程语言的基本语法、面向对象编程思想和常用类库。
具体安排如下:1.Java编程语言的基本语法:–数据类型和变量–运算符和表达式–数组和字符串2.面向对象编程思想:–继承和多态–封装和抽象3.Java编程语言的常用类库和API:–输入输出流–多线程编程三、教学方法本课程的教学方法主要包括讲授法、案例分析法和实验法。
具体方法如下:1.讲授法:通过教师的讲解,让学生掌握Java编程语言的基本语法和概念。
2.案例分析法:通过分析实际案例,让学生理解面向对象编程的思想和方法。
3.实验法:通过编写和调试程序,让学生巩固Java编程语言的知识和技巧。
四、教学资源本课程的教学资源包括教材、参考书、多媒体资料和实验设备。
具体资源如下:1.教材:选用《Java编程思想》作为主要教材,辅助以相关参考书籍。
2.多媒体资料:提供Java编程语言的教程、案例分析和编程技巧的视频资料。
3.实验设备:提供计算机和网络环境,让学生进行编程实验和调试。
五、教学评估本课程的评估方式包括平时表现、作业、考试和项目实践等。
评估方式应客观、公正,能够全面反映学生的学习成果。
网络协议编程课程设计java
网络协议编程课程设计java一、课程目标知识目标:1. 让学生理解网络协议编程的基本概念,掌握Java语言实现网络编程的方法;2. 使学生掌握TCP/IP协议族的原理,了解不同网络协议的特点和应用场景;3. 引导学生掌握套接字编程技术,学会使用Java语言实现客户端与服务器端的数据传输。
技能目标:1. 培养学生运用Java语言编写网络应用程序的能力,学会使用套接字进行网络通信;2. 培养学生分析、解决网络编程中遇到的问题,提高实际编程能力;3. 培养学生团队协作能力,学会共同开发、调试网络应用程序。
情感态度价值观目标:1. 培养学生热爱编程,对网络协议编程产生浓厚兴趣;2. 培养学生积极探究、主动学习的精神,敢于面对编程过程中的困难与挑战;3. 引导学生树立正确的网络安全意识,认识到网络协议编程在实际应用中的重要性。
本课程针对高年级学生,具备一定的Java编程基础和网络知识。
课程性质为理论与实践相结合,注重培养学生的实际编程能力。
教学要求学生在理解网络协议原理的基础上,通过实际编程实践,掌握Java网络编程技术,培养解决实际问题的能力。
课程目标的设定旨在使学生能够达到上述学习成果,为后续深入学习网络编程打下坚实基础。
二、教学内容1. 网络协议编程基本概念:介绍网络编程的背景、意义,对比不同网络协议,如TCP、UDP、HTTP等,分析各自优缺点及适用场景。
教材章节:第1章 网络编程概述2. Java网络编程基础:讲解Java网络编程的核心类库,如包,重点介绍InetAddress、Socket、ServerSocket等类的使用方法。
教材章节:第2章 Java网络编程基础3. 套接字编程:详细讲解套接字编程原理,包括TCP套接字和UDP套接字的使用,举例说明如何实现客户端与服务器端的数据传输。
教材章节:第3章 套接字编程4. 多线程网络编程:介绍多线程在网络编程中的应用,学会使用Java多线程实现并发网络通信,提高程序性能。
《基于课件的Java网络编程课程设计》
Q&A交流讨论
在本节中,你可以提问、交流和讨论与课程内容相关的问题。我们将共同探 讨解决方案和分享经验。
2. 使用单元测 试和集成测 试验证代码 功能
部署与维护
1. 部署到服务 器并进行性
2. 能定测期试维护和 更新功能
项目演示与总结
1
项目演示
2
展示项目的主要功能和特点,让观众
了解你的成果。
3
演示准备
准备演示所需的环境和数据,确保顺 利进行演示。
总结回顾
总结项目的经验和教训,分享项目开 发过程中的收获。
团队合作
与队友一起进行项目开发,共 同解决问题和实现功能。
实践经验
通过项目实践,提升编程能力 和理解网络编程的实际应用。
项目设计与开发流程
需求分析
1. 定义功能和 性能要求
2. 确定用户需 求和用例
系统设计
1. 概要设计和 详细设计
2. 选择合适的 架构和技术
编码与测试
1. 按照设计方 案进行编码
《基于课件的Java网络编 程课程设计》
欢迎参加《基于课件的Java网络编程课程设计》。本课程将带你重温Java网 络编程的基础知识,并通过课件设计与实践项目,帮助你掌握项目设计与开 发流程。
课程设计简介
课程设计是为了让应用程序来进 行课程设计。
Java网络编程基础知识回顾
1 Socket通信
了解基本的Socket通信原理和使用方法。
2 网络协议
学习常见的网络协议,如TCP和UDP,并了解它们的特点和区别。
3 并发编程
掌握在网络编程中处理并发请求的技术和工具。
4 网络安全
了解网络安全的基本原理和常见攻击方式,学习防范措施。
Java网络编程实践课程设计
J a v a网络编程实践课程设计说明书课程名称:Java网络编程课程设计题目:基于C/S的学生信息管理姓名:学号:教学班号:指导教师:王小刚兰州交通大学软件科学与工程系二○ 13 年 12 月 27 日任务书实现应用,可以通过网络在客户端对存放在服务器端的学生信息表(至少包含学号、姓名、性别、年龄、籍贯等字段)学生纪录增、删、改、查,并返回结果。
要能通过菜单选择功能。
基于Socket,多客户端使用多线程,以能同时从多个客户端执行功能。
必须提供友好直观、布局合理的图形界面选择功能、显示信息和填写修改信息。
成员及分工列表图形界面设计者:数据库设计者: Socket设计者:多线程设计者:项目简述和目的熟悉JAVA 语法,掌握图形化界面、多线程、网络、数据库等综合编程,掌握用编程语言开发由若干功能组成的小型项目的基本流程,增强动手实践能力,巩固和加强书本知识的学习,体会JAVA编程的特点。
解题基本思路设计的信息管理系统中的窗体部分,没有使用菜单,而是按钮。
菜单虽然简单,方便,但我认为在窗体里运用按钮是有必要的,这样可以方便添加、删除,修改等动作,通过一步步地做,慢慢的集合,比较的清晰,还显得比较的有层次感. 利用Swing设计图形界面利用Access表设计数据库,利用socket设计网络信息管理模块分析和设计学生管理系统要实现查询,添加,删除,显示,修改等功能。
查询不存在要报错,添加相同也要报错,删除不存在的号也要报错,修改不成功也要报错。
如果成功的话也要提示。
而且每一步都要密码才能进行操作,否则报错提醒!主要程序源代码Client源代码package socket;import java.io.*;import .*;import java.awt.*;import javax.swing.*;import java.awt.event.*;class Client extends JFrame implements ActionListener//登入界面功能是输入正确的账号和密码才能进入,错误的话返回错误提示!{private JLabel usernameLabel;//帐号private JLabel a;//标题private JTextField usernameTextField;//帐号文本框private JLabel passwordLabel;//密码private JPasswordField passwordField;//密码文本框private JButton button1;//确定按钮private JButton button2;//取消按钮public Client(){super.setTitle("登录界面");Container c=getContentPane();c.setLayout(null);a=new JLabel("欢迎进入学生登入系统!");a.setBounds(50,30,300,30);a.setFont(new Font("黑色",Font.BOLD,25));usernameLabel=new JLabel("账号");usernameLabel.setBounds(50,90,170,30);usernameLabel.setFont(new Font("黑色",Font.BOLD,30)); usernameTextField=new JTextField();usernameTextField.setBounds(150,90,170,30); usernameTextField.setFont(new Font("宋体",Font.BOLD,20)); passwordLabel=new JLabel("密码:");passwordLabel.setBounds(50,120,170,30);passwordLabel.setFont(new Font("黑色",Font.BOLD,30)); passwordField=new JPasswordField();passwordField.setBounds(150,120,170,30);passwordField.setFont(new Font("黑色",Font.BOLD,30)); passwordField.setEchoChar('*');button1=new JButton();button1.setText("进入");button1.setFont(new Font("黑色",Font.BOLD,20));button1.setBounds(50,160,100,30);button2=new JButton();button2.setText("退出");button2.setFont(new Font("黑色",Font.BOLD,20));button2.setBounds(220,160,100,30);button1.addActionListener(this);//按钮监听button2.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){System.exit(0);}});c.add(passwordLabel);c.add(passwordField);c.add(usernameLabel);c.add(button1);c.add(button2);c.add(usernameTextField);c.add(a);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setSize(400,300);setLocation(322,30);setVisible(true);}private void showText()//登入失败消息框{String xie;xie=usernameTextField.getText();JOptionPane.showMessageDialog(this.getParent(),"登入失败!"+xie);}private void showText1()//登入成功消息框{String xie;xie=usernameTextField.getText();JOptionPane.showMessageDialog(this.getParent(),"登入成功!"+xie);}public void actionPerformed(ActionEvent e)//按钮监听事件{Socket ssocket = null;String st1,st2,st3;final PrintWriter writer1;st1=usernameTextField.getText();st2=passwordField.getText();st3="进入"+","+st1+","+st2;//把帐号和密码打包成字符串try{ssocket=new Socket("localHost",10000);//创建socketwriter1=new PrintWriter(ssocket.getOutputStream());//发送给服务器!if(!(st1.equals(null)) && !(st2.equals(null)))//判断是否为空{writer1.println(st3);writer1.flush();}else if(st1.equals(null) || st2.equals(null))//判断是否为空{writer1.println("error1");writer1.flush();}BufferedReader read=new BufferedReader(new InputStreamReader(ssocket.getInputStream()));String s_red=null;System.out.println("please wait.......");while(true){s_red=read.readLine();if(s_red!=null)break;}if(s_red.equals("yes"))//读取服务端的内容,如果是yes执行Client1的类{showText1();dispose();new Client1();}else//读取服务端的内容,如果不是yes执行showText()报错提醒!{showText();usernameTextField.setText(null);passwordField.setText(null);}}catch (Exception e1){e1.printStackTrace();}}public static void main(String[] args)throws IOException{Client s=new Client();}}class Client1 extends JFrame //登录界面的类包含查询,删除,增添,修改,返回等按钮!共4个按钮监听对象!{private JButton button1,button2,button3,button4,button5,button6;public Client1(){super.setTitle("登录界面");Container c=getContentPane();setLayout(null);button1=new JButton();button1.setText("查询");button1.setFont(new Font("黑色",Font.BOLD,20));button1.setBounds(50,50,120,50);button2=new JButton();button2.setText("删除");button2.setFont(new Font("黑色",Font.BOLD,20));button2.setBounds(220,50,120,50);button3=new JButton();button3.setText("增添");button3.setFont(new Font("黑色",Font.BOLD,20));button3.setBounds(50,150,120,50);button4=new JButton();button4.setText("修改");button4.setFont(new Font("黑色",Font.BOLD,20));button4.setBounds(220,150,120,50);button5=new JButton();button5.setText("显示");button5.setFont(new Font("黑色",Font.BOLD,20));button5.setBounds(50,250,120,50);button6=new JButton();button6.setText("返回");button6.setFont(new Font("黑色",Font.BOLD,20));button6.setBounds(220,250,120,50);button1.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){dispose();new Client2();}});button2.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){dispose();new Client4();}});button3.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){dispose();new Client3();}});button4.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){dispose();new Client5();}});button5.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){dispose();new Client6();}});button6.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){dispose();new Client();}});c.add(button1);c.add(button2);c.add(button3);c.add(button4);c.add(button5);c.add(button6);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setSize(400,450);setLocation(322,30);setVisible(true);}public static void main(String[] args)//throws IOException{new Client1();}}class Client2 extends JFrame implements ActionListener//查询类的功能是输入学号和密码,如果正确则返回成功的提醒,如果失败则返回失败的提醒,如果该学好存在,则返回存在的提醒!{private JLabel usernameLabel1;private JLabel usernameLabel2;private JLabel usernameLabel3;private JLabel usernameLabel4;private JLabel usernameLabel5;private JLabel usernameLabel6;private JLabel usernameLabel7;private JLabel usernameLabel8;private JTextField usernameTextField1;private JTextField usernameTextField2;private JTextField usernameTextField3;private JTextField usernameTextField4;private JTextField usernameTextField5;private JTextField usernameTextField6;private JTextField usernameTextField7;private JTextField usernameTextField8;private JButton button1;private JButton button2;private JLabel label1;public Client2(){super.setTitle("学生操作界面");Container c=getContentPane();c.setLayout(null);label1=new JLabel("欢迎进入学生查询系统!");label1.setBounds(40,20,400,30);label1.setFont(new Font("黑色",Font.BOLD,35));usernameLabel1=new JLabel("查询号");usernameLabel1.setBounds(70,110,200,30);usernameLabel1.setFont(new Font("黑色",Font.BOLD,30));usernameTextField1=new JTextField();usernameTextField1.setBounds(170,110,200,30);usernameTextField1.setFont(new Font("宋体",Font.BOLD,30));usernameLabel2=new JLabel("密码:");usernameLabel2.setBounds(70,150,200,30);usernameLabel2.setFont(new Font("黑色",Font.BOLD,32));usernameTextField2=new JTextField();usernameTextField2.setBounds(170,150,200,30);usernameTextField2.setFont(new Font("黑色",Font.BOLD,30));usernameLabel3=new JLabel("性别:");usernameLabel3.setFont(new Font("黑色",Font.BOLD,32));usernameLabel3.setBounds(70,190,200,30);usernameTextField3=new JTextField();usernameTextField3.setBounds(170,190,200,30);usernameTextField3.setFont(new Font("黑色",Font.BOLD,30));usernameLabel4=new JLabel("籍贯:");usernameLabel4.setBounds(70,230,200,30);usernameLabel4.setFont(new Font("黑色",Font.BOLD,30));usernameTextField4=new JTextField();usernameTextField4.setBounds(170,230,200,30);usernameTextField4.setFont(new Font("黑色",Font.BOLD,30));usernameLabel5=new JLabel("专业:");usernameLabel5.setBounds(70,270,200,30);usernameLabel5.setFont(new Font("黑色",Font.BOLD,30));usernameTextField5=new JTextField();usernameTextField5.setBounds(170,270,200,30);usernameTextField5.setFont(new Font("黑色",Font.BOLD,30));usernameLabel6=new JLabel("姓名:");usernameLabel6.setBounds(70,310,200,30);usernameLabel6.setFont(new Font("黑色",Font.BOLD,30));usernameTextField6=new JTextField();usernameTextField6.setBounds(170,310,200,30); usernameTextField6.setFont(new Font("黑色",Font.BOLD,30)); usernameLabel7=new JLabel("电话:");usernameLabel7.setBounds(70,350,200,30);usernameLabel7.setFont(new Font("黑色",Font.BOLD,30)); usernameTextField7=new JTextField();usernameTextField7.setBounds(170,350,200,30); usernameTextField7.setFont(new Font("宋体",Font.BOLD,30)); usernameLabel8=new JLabel("QQ:");usernameLabel8.setBounds(70,390,200,30);usernameLabel8.setFont(new Font("黑色",Font.BOLD,30)); usernameTextField8=new JTextField();usernameTextField8.setBounds(170,390,200,30); usernameTextField8.setFont(new Font("宋体",Font.BOLD,30));button1=new JButton();button1.setText("查询");button1.setFont(new Font("黑色",Font.BOLD,30));button1.setBounds(60,470,130,40);button2=new JButton();button2.setText("返回");button2.setFont(new Font("黑色",Font.BOLD,30));button2.setBounds(270,470,130,40);c.add(usernameLabel1);c.add(usernameLabel2);c.add(usernameLabel3);c.add(usernameLabel4);c.add(usernameLabel5);c.add(usernameLabel6);c.add(usernameLabel7);c.add(usernameLabel8);c.add(button1);c.add(button2);c.add(usernameTextField1);c.add(usernameTextField2);c.add(usernameTextField3);c.add(usernameTextField4);c.add(usernameTextField5);c.add(usernameTextField6);c.add(usernameTextField7);c.add(usernameTextField8);c.add(label1);button1.addActionListener(this);button2.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){dispose();new Client1();}});setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setSize(470,580);setLocation(322,30);setVisible(true);}public static void main(String[] args){Client2 s=new Client2();}private void showText(){String xie;xie=usernameTextField1.getText();JOptionPane.showMessageDialog(this.getParent(),"查询成功!"+xie); }private void showText2(){String xie;xie=usernameTextField1.getText();JOptionPane.showMessageDialog(this.getParent(),"该号不存在!"+xie);}public void actionPerformed(ActionEvent e){Socket ssocket = null;String str, st1,st2;final PrintWriter writer1;st1=usernameTextField1.getText();st2=usernameTextField2.getText();str="查询"+","+st1+","+st2;try{ssocket=new Socket("localHost",10000);writer1=new PrintWriter(ssocket.getOutputStream());if(!(st1.equals(null)) && !(st2.equals(null))){writer1.println(str);writer1.flush();}else if(st1.equals(null) || st2.equals(null)){writer1.println("error1");writer1.flush();}BufferedReader read=new BufferedReader(new InputStreamReader(ssocket.getInputStream()));String line=null;System.out.println("please wait.......");line=read.readLine();if(line.equals("Not1")){showText2();usernameTextField1.setText(null);usernameTextField2.setText(null);usernameTextField3.setText(null);usernameTextField4.setText(null);usernameTextField5.setText(null);usernameTextField6.setText(null);usernameTextField7.setText(null);usernameTextField8.setText(null);}else{String sarry[]=line.split(","); //usernameTextField1.setText(sarry[1]);usernameTextField2.setText(sarry[2]);usernameTextField3.setText(sarry[3]);usernameTextField4.setText(sarry[4]);usernameTextField5.setText(sarry[5]);usernameTextField6.setText(sarry[6]);usernameTextField7.setText(sarry[7]);usernameTextField8.setText(sarry[8]);showText();}}catch (Exception e1){e1.printStackTrace();}}}Server的源代码package socket;import java.io.*;import .*;import java.sql.*;public class Server //Server类通过引用来实现多线程{public static void main(String args[]){Thread1 s=new Thread1();s.start();}}class Thread1 extends Thread//多线程类{static ServerSocket server;static Socket ssocket;static BufferedReader reader1;static BufferedReader reader2;static String sql, databack;static Stringid,password,address,myname,class1,QQ,phone,sex,school;static ResultSet rs; static Statement stmt; staticConnection conn;public void run()//多线程的run()方法{try{final Stringdb_driver="sun.jdbc.odbc.JdbcOdbcDriver"; //连接多线程!final String db_url="jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=d:/my1.mdb";try{}catch(Exception e){e.printStackTrace();}try{server=new ServerSocket(10000);//建立端口System.out.println("服务器已经创建!等待客户机的链接.......");int flag=0;int flag1=0;while(true){ssocket=server.accept();//连接客户端System.out.println("完成链接!");reader1=new BufferedReader(newInputStreamReader(ssocket.getInputStream()));PrintWriter writer2=newPrintWriter(ssocket.getOutputStream());String s1=reader1.readLine();String sarry[]=s1.split(",");sql="select*from one";//连接数据库中的表名Class.forName(db_driver);conn=DriverManager.getConnection (db_url,"","");if(conn!=null){System.out.println("数据库已连接.....");}else{System.out.println("连接失败!");}stmt=conn.createStatement();rs=stmt.executeQuery(sql);if(sarry[0].equals("进入"))//获取客户端的进入功能{while(rs.next()){id=rs.getString("ID"); password=rs.getString("password");if(sarry[1].equals(id) && sarry[2].equals(password)){intnumber1=Integer.parseInt(id);intnumber2=Integer.parseInt(password);if(number1==201211016 && number2==16){flag=1;break;}}}if(flag==1){writer2.println("yes");writer2.flush();flag=0;}else{writer2.println ("no");writer2.flush();}stmt.close();conn.close();}else if(sarry[0].equals("查询"))//获取客户端的查询功能{while(rs.next()){school=rs.getString ("school");id=rs.getString("ID");password=rs.getString("password");sex=rs.getString("sex");address=rs.getString("address");class1=rs.getString("class");myname=rs.getString("myname");phone=rs.getString("phone");QQ=rs.getString("QQ");if(sarry[1].equals(id) && sarry[2].equals(password)){flag1=1;break;}}if(flag1==1){rs.next();String A[]={school,id,password,sex,address,class1,myname,phone,QQ};databack="";for(int i=0;i<=A.length-1;i++){databack+=A[i];if(i!=A.length-1)databack+=",";}writer2.println (databack);writer2.flush();flag1=0;}else{writer2.println("Not1");writer2.flush();}stmt.close();conn.close();}else if(sarry[0].equals("添加"))//获取客户端的添加功能{int boolean1=0;while(rs.next()){id=rs.getString("ID");if(sarry[1].equals(id)){boolean1=0;break;}else{String s="insert intoone(ID,password,sex,address,class,myname,phone,QQ) values (?,?,?,?,?,?,?,?)";PreparedStatement stat1=conn.prepareStatement(s);stat1.setString(1,sarry[1]);stat1.setString(2,sarry[2]);stat1.setString(3,sarry[3]);stat1.setString(4,sarry[4]);stat1.setString(5,sarry[5]);stat1.setString(6,sarry[6]);stat1.setString(7,sarry[7]);stat1.setString(8,sarry[8]);stat1.executeUpdate();boolean1=1;break;}}if(boolean1==1){writer2.println("Y");writer2.flush();boolean1=0;}else{writer2.println("No11");writer2.flush();}stmt.close();conn.close();}else if(sarry[0].equals("删除"))//获取客户端的删除功能{while(rs.next()){id=rs.getString("ID");if(sarry[1].equals(id)){Strings="delete from one where ID=?"; PreparedStatement stat1=conn.prepareStatement(s); stat1.setString(1,sarry[1]);stat1.executeUpdate();flag=1;}}if(flag==1){writer2.println("Y");writer2.flush();flag=0;}else{writer2.println("N");writer2.flush();}stmt.close();conn.close();}else if(sarry[0].equals("修改")){sex=sarry[3];address=sarry[4];class1=sarry[5];myname=sarry[6];phone=sarry[7];QQ=sarry[8];while(rs.next()){Stringid1=rs.getString("ID"); String password1=rs.getString("password");if(sarry[9].equals(id1) && sarry[10].equals(password1)){flag=1;break;}}if(flag==1){String id2=sarry[9];id=sarry[1];password=sarry[2];String s="update one setpassword=?,sex=?,address=?,class=?,myname=?,phone=?,QQ=?,ID=? where ID=?";PreparedStatement stat1=conn.prepareStatement(s);stat1.setString(1,password);stat1.setString(2,sex);stat1.setString(3,address);stat1.setString(4,class1); stat1.setString(5,myname); stat1.setString(6,phone);stat1.setString(7,QQ);stat1.setString(8,id);stat1.setString(9,id2);stat1.executeUpdate();writer2.println("Y2");writer2.flush();flag=0;}else{ writer2.println("N2");writer2.flush();}stmt.close();conn.close();}else if(sarry[0].equals("显示")){Statement stmt1 =conn.createStatement();ResultSet rs1 =stmt1.executeQuery("select * from one");databack="";while(rs1.next()){Stringid=rs1.getString("ID");Stringpassword=rs1.getString("password");Stringsex=rs1.getString("sex");Stringaddress=rs1.getString("address");Stringclass1=rs1.getString("class");Stringmyname=rs1.getString("myname");Stringphone=rs1.getString("phone");StringQQ=rs1.getString("QQ");String xie=id+","+password+","+sex+","+address+","+class1+","+myname+","+phone+","+QQ+",";databack+=xie;flag1=1;}if(flag1==1){writer2.println (databack);writer2.flush();flag1=0;}else{writer2.println ("Not1");writer2.flush();}stmt.close();conn.close();}}}catch(Exception e){}finally{System.out.println("链接发生错误,请重试!");}try{if(reader1!=null){reader1.close();}if(ssocket!=null){ssocket.close();}}catch(Exception e1){}}catch(Exception e){System.out.println("false");}}}运行截图总结和体会经过本人的努力,学生管理系统终于做完了,经过这次课程设计,自己总结了这个学生信息管理系统的一些问题,不过收获还是颇为丰富的,再有理论知识上结合实践,使我学到了更多。
《Java网络编程》课程设计实施方案
用JAVA的io、net、awt、swing包中的类实现一个简单的HTTP服务器,该服务器侦听80或者8080端口;
主要包括如下功能:
1.有GUI图形界面;
2.当客户端连接时,能够把静态html页面发送给客户端浏览器;
七、局域网流量监控
用第三方插件Jpcap、net中的类实现局域网的流量监控;
2.可以对某个网站进行图片或者某类文件的抓取,统计网站图片、网页总数
五、、swing包中的类实现一个简单的FTP服务器,该服务器侦听21端口;
主要包括如下功能:
1.有GUI图形界面;
2.需要用户注册;
3.用户登录后可以进行建立目录、删除目录和文件传输等操作;
(2)根据需求分析结果,对项目进行界面布局,功能实现等的实施。
(3)对项目功能进行测试,并根据测试情况进行完善项目。
(4)根据项目的情况,针对项目的设计、实现、功能说明和配置等形成配套文档。
本次课程设计周数:2周
进度安排:
1.系统分析阶段(1-2天)
2.功能模块设计(2-3天)
3.界面设计(1-2天)
指导老师
张静
实践环节性质和目的:
本课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。
实践环节内容:
结合计算机网络原理,利用Java语言编程知识和技巧,运用Eclipse开发工具,完成至少1个面向网络的程序设计。
题目参考:
一、基于Socket通信(TCP)的简单聊天室
用JAVA的io、net、awt、swing包中的类实现一个简单的聊天室;
主要包括如下功能:
1.有服务器端和客户端;
jave课程设计
jave 课程设计一、教学目标本课程的目标是让学生掌握Java编程的基础知识,包括Java语法、数据结构、控制结构、面向对象编程等。
通过本课程的学习,学生应能够独立编写简单的Java程序,理解面向对象编程的基本概念,并能够运用Java语言解决实际问题。
在知识目标方面,学生需要掌握Java的基本语法、数据类型、运算符、控制结构、数组、字符串、集合、面向对象编程等。
在技能目标方面,学生需要能够使用Java编写简单的程序,包括输入输出、数据处理、面向对象的设计等。
在情感态度价值观目标方面,学生应能够积极参与课堂讨论,主动探索编程问题,培养良好的编程习惯和团队协作精神。
二、教学内容本课程的教学内容主要包括Java编程的基本概念和语法,以及面向对象编程的原理和方法。
具体包括以下几个部分:1.Java语法和基本概念:Java的基本语法规则、数据类型、运算符、控制结构、数组、字符串等。
2.面向对象编程:类和对象的概念、构造方法、封装、继承、多态等。
3.数据结构:集合框架、泛型、文件操作等。
4.输入输出:Java的输入输出流、文件读写等。
5.异常处理:异常的概念、异常处理机制等。
6.网络编程:Java的网络编程基础、Socket编程等。
三、教学方法本课程采用多种教学方法,以激发学生的学习兴趣和主动性。
具体包括以下几种方法:1.讲授法:教师讲解Java编程的基本概念和语法,引导学生理解和掌握相关知识。
2.案例分析法:通过分析具体的Java编程案例,让学生理解面向对象编程的原理和方法。
3.实验法:学生动手编写Java程序,进行实验操作,培养实际编程能力。
4.讨论法:学生进行小组讨论,共同解决问题,提高团队协作能力。
四、教学资源本课程的教学资源包括教材、参考书、多媒体资料和实验设备等。
具体包括以下几种资源:1.教材:Java编程基础教程、Java核心技术等。
2.参考书:Java编程思想、Java并发编程实战等。
3.多媒体资料:教学PPT、视频教程、在线代码示例等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
枣庄学院信息科学与工程学院课程设计任务书题目:基于UDP的聊天系统小组成员:谭德鹏、崔浩、王珂、李洪康成员学号:201212120221、201212120202201212120224、201212120209 专业班级:网络工程、2012级本2班课程:Java网络编程指导教师:吕加国职称:副教授完成时间:2015年4 月----2015年6 月枣庄学院信息科学与工程学院制2015年4 月15日摘要 (4)一、需求分析 (4)1.1 课程设计目的 (4)1.2 课程设计的内容 (4)二 . 概要设计 (5)2.1 UDP协议的理解 (5)2.1.1UDP协议定义 (5)2.1.2UDP协议特点 (5)2.1.3基于C/S的多客服端相互通信原理分析: (6)2.2 原理概述 (6)2.3 界面设计 (7)三、详细设计 (7)3.1 聊天界面的设计 (7)3.2 响应发送按钮 (9)3.3 测试函数 (10)四、测试聊天系统 (11)4.1 聊天界面 (11)4.2 两台主机间进行通信 (11)4.3 开始应用聊天系统 (12)五、总结 (13)随着网络技术的发展及人们生活的需求,网络聊天已越来越受到人们的青睐。
网络聊天已经成为人们工作生活中传递信息、交流感情的重要工具,给人们带来了很大的方便。
本课题是开发一个基于UDP的局域网聊天系统,运用软件工程的设计流程,综合运用数据库编程技术、Windows程序设计技术、网络通讯技术,此网络聊天工具采用客户端/服务器(C/S)模式,客户端采用UDP与服务器连接,客户端与客户端之间通过UDP互相通讯。
服务器端具有服务器端口设置,此聊天工具能实现多人聊天功能,适用于局域网使用的网络聊天工具,其操作简单,灵活性好,运行也比较稳定。
一、需求分析1.1 课程设计目的通过设计网络协议及应用程序来加深理解网络各层的功能和机理,特别是对网络层、运输层、应用层的理解。
独立编写基于UDP的网络应用程序,独立上机调试程序,掌握基于UDP的网络应用基本技术。
培养独立思考问题、分析问题的能力和规范化工程设计的能力。
综合运用所学的知识去解决实践中的应用问题,掌握实验技能。
为以后的毕业设计与实际工作打下基础。
1.2 课程设计的内容用户数据报UDP是一个无连接协议使用这种协议时并不需要在两台计算机之间建立固定的连接也就是说通信双方没有服务器和客户机之分它们之间进行的是对等通信所以它的优势很明显是现代通信不可或缺的一部分。
所以利用它的优势设计一个可以聊天的软件实现两台计算机间的即时通讯。
二 . 概要设计2.1 UDP协议的理解2.1.1UDP协议定义用户数据报协议,主要用来支持那些需要在计算机之间传输数据的网络应用。
包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。
UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天,UDP仍然不失为一项非常实用和可行的网络传输层协议。
UDP协议直接位于IP(网际协议)协议的顶层。
UDP 协议的主要作用是将网络数据流量压缩成数据报的形式。
一个典型的数据报就是一个二进制数据的传输单位。
每一个数据报的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。
UDP协议使用端口号为不同的应用保留其各自的数据传输通道。
正是采用这一机制实现对同一时刻内多项应用同时发送和接收数据的支持。
数据发送一方(可以是客户端或服务器端)将UDP数据报通过源端口发送出去,而数据接收一方则通过目标端口接收数据。
有的网络应用只能使用预先为其预留或注册的静态端口;而另外一些网络应用则可以使用未被注册的动态端口。
因为UDP报头使用两个字节存放端口号,所以端口号的有效范围是从0到65535。
一般来说,大于49151的端口号都代表动态端口。
数据报的长度是指包括报头和数据部分在内的总的字节数。
因为报头的长度是固定的,所以该域主要被用来计算可变长度的数据部分(又称为数据负载)。
数据报的最大长度根据操作环境的不同而各异。
从理论上说,包含报头在内的数据报的最大长度为65535字节。
不过,一些实际应用往往会限制数据报的大小,有时会降低到8192字节。
UDP协议使用报头中的校验值来保证数据的安全。
校验值首先在数据发送方通过特殊的算法计算得出,在传递到接收方之后,还需要再重新计算。
如果某个数据报在传输过程中被第三方篡改或者由于线路噪音等原因受到损坏,发送和接收方的校验计算值将不会相符,由此UDP协议可以检测是否出错。
UDP 协议并不提供数据传送的保证机制。
如果在从发送方到接收方的传递过程中出现数据报的丢失,协议本身并不能做出任何检测或提示,由于排除了信息可靠传递机制,将安全和排序等功能移交给上层应用来完成,极大降低了执行时间,使速度得到了保证。
2.1.2UDP协议特点1、UDP传送数据前并不与对方建立连接,即UDP是无连接的,在传输数据前,发送方和接收方相互交换信息使双方同步。
UDP不对收到的数据进行排序,在UDP报文的首部中并没有关于数据顺序的2、UDP传送数据前并不与对方建立连接,即UDP是无连接的,在传输数据前,发送方和接收方相互交换信息使双方同步。
3、UDP不对收到的数据进行排序,在UDP报文的首部中并没有关于数据顺序的信息(如TCP所采用的序号),而且报文不一定按顺序到达的,所以接收端无从排起。
4、UDP对接收到的数据报不发送确认信号,发送端不知道数据是否被正确接收,也不会重发数据。
5、UDP传送数据较TCP快速,系统开销也少。
6、由于缺乏拥塞控制(congestion control),需要基于网络的机制来减小因失控和高速UDP流量负荷而导致的拥塞崩溃效应。
换句话说,因为UDP发送者不能够检测拥塞,所以像使用包队列和丢弃技术的路由器这样的网络基本设备往往就成为降低UDP过大通信量的有效工具。
数据报拥塞控制协议(DCCP)设计成通过在诸如流媒体类型的高速率UDP流中增加主机拥塞控制来减小这个潜在的问题。
从以上特点可知,UDP提供的是无连接的、不可靠的数据传送方式,是一种尽力而为的数据交付服务。
2.1.3基于C/S的多客服端相互通信原理分析:在C/S模式中,它是在分散式,集中式,以及分布式基础上发展起来的一种新模型,目前大多数网络通信以及应用都属于这种模型,C/S模式将一个网络事务分为两部分,一部分是客户端(Client),他为用户提供网络请求服务的接口,另一部分是服务端(Server),它负责接受用户对服务的请求,并将这些服务透明的提供给用户,既适用于实际应用的程序,又实用于真正的计算装置,举例来说,我们到饭店吃饭时,要首先提出请求吃什么,属于客户端,饭店服务员根据请求提供相应的服务,属于服务端,至于相应的饭菜是由哪一个厨师来做,则由饭店的服务员去联系,而客户端只需要和服务器打交道就行了,从程序实现上来说,客户端和服务器打交道实际上是两个进程打交道,服务端启动server进程,并等待客户端与其联系,而客户端则启动客户进程和服务器打交道。
当服务器进程处理完一个客服进程请求的信息之后,由接着等待其他客户的请求。
2.2 原理概述采用UDP协议,通过服务器中转方式。
因此,现在的IP侦探在你仅仅跟对方发送聊天消息的时候是无法获取到IP的。
UDP 协议是不可靠协议,它只管发送,不管对方是否收到。
但它的传输很高效,因为UDP协议排除了信息可靠传递机制,将安全和排序等功能移交给上层应用来完成,极大降低了执行时间,使速度得到了保证。
例如,腾讯采用了上层协议来保证可靠传输:如果客户端使用UDP协议发出消息后,服务器收到该包,需要使用UDP协议发回一个应答包。
如此来保证消息可以无遗漏传输。
2.3 界面设计在Frame布局容器中,添加一个显示聊天的文本框,在加入Panel面板,Panel 面板中包括文本编辑框。
三、详细设计3.1 聊天界面的设计public UDPChat(){mainJframe = new JFrame("聊天——————UDP协议");con=mainJframe.getContentPane(); showArea= new JTextArea(); showArea.setEditable(false); showArea.setLineWrap(true);lal1=new JLabel("接收端口");lal2=new JLabel("发送端口");lal3=new JLabel("对方的地址"); sendPortText=new JTextField(); sendPortText.setColumns(5); receivePortText= new JTextField(); receivePortText.setColumns(5); IPAddressText=new JTextField(); IPAddressText.setColumns(8); starBtn=new JButton("开始"); starBtn.addActionListener(this); pane1=new JPanel();pane1.setLayout(new FlowLayout()); pane1.add(lal1);pane1.add(receivePortText);pane1.add(lal2);pane1.add(sendPortText);pane1.add(lal3);pane1.add(IPAddressText);pane1.add(starBtn);JSPane = new JScrollPane(showArea); msgText=new JTextField(); msgText.setColumns(40); msgText.setEditable(false); msgText.addActionListener(this); pane2=new JPanel();pane2.setLayout(new FlowLayout()); pane2.add(msgText);sendBtn=new JButton();pane2.add(sendBtn);con.add(pane1,BorderLayout.NORTH);con.add(JSPane,BorderLayout.CENTER);con.add(pane2,BorderLayout.SOUTH);mainJframe.setSize(600,400);mainJframe.setVisible(true);mainJframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }3.2 响应发送按钮public void actionPerformed(ActionEvent e){try{if(e.getSource() == starBtn){inBuf=new byte[BUFSIZE];sendPort = Integer.parseInt(sendPortText.getText());sendIP=InetAddress.getByName(IPAddressText.getText());sendSocket=new DatagramSocket();receivePort=Integer.parseInt(receivePortText.getText());receivePack=new DatagramPacket(inBuf,BUFSIZE);receiveSocket=new DatagramSocket(receivePort);thread = new Thread(this);thread.setPriority(Thread.MIN_PRIORITY);thread.start();starBtn.setEnabled(false);sendBtn.setEnabled(true);msgText.setEditable(true);}else{outBuf=msgText.getText().getBytes();sendPack=newDatagramPacket(outBuf,outBuf.length,sendIP,sendPort);sendSocket.send(sendPack);showArea.append("我说:"+msgText.getText()+"\n");msgText.setText(null);}}catch(UnknownHostException el){showArea.append("无法连接到指定地址\n");}catch(SocketException el){showArea.append("无法打开指定端口\n");}catch(IOException el){showArea.append("发送数据失败\n");}}3.3 测试函数public void run(){String msgstr;while(true){try{receiveSocket.receive(receivePack);msgstr=newString(receivePack.getData(),0,receivePack.getLength());showArea.append("对方说:"+msgstr+"\n");}catch(IOException el){showArea.append("接收数据出错\n");}}四、测试聊天系统4.1 聊天界面运行该聊天系统,显示聊天界面4.2 两台主机间进行通信填入对方主机的ip地址,接收端口为对方主机的发送端口,点击开始按钮,两台主机间就可以进行通信了,测试结果如下图:主机1主机24.3 开始应用聊天系统通过主机1向主机2发送一段文字,点击回车键可以发送,这是主机2的聊天界面上可以显示主机1发送的聊天内容。