收藏 分销(赏)

银行账目管理系统.doc

上传人:二*** 文档编号:4522443 上传时间:2024-09-26 格式:DOC 页数:75 大小:977.54KB 下载积分:5 金币
下载 相关 举报
银行账目管理系统.doc_第1页
第1页 / 共75页
本文档共75页,全文阅读请下载到手机保存,查看更方便
资源描述
安徽工业大学 毕业设计(论文)任务书 课题名称 银行账目管理系统 学 院 计算机学院 专业班级 计算机科学与技术093班 姓 名 吴 杨 杨 学 号 099074094 毕业设计(论文)的主要内容: 1)按照软件工程的方法结合管理系统设计的要求进行需求分析、总体设计、详细设计、编码和测试; 2)以Java为开发工具进行系统前台设计(各开发工具尽可能用高版本),以Oracle 9i为工具进行系统后台数据管理,使用JDBC技术实现数据库的连接和使用,能提供一个界面良好,交互功能强,管理方便的基于C/S的管理系统设计; 3)要求系统至少具有用户开户、存款、取款、贷款、还贷款、设置透支额度、修改信息和查询统计等功能; 4)软件结构良好,具备一定的可维护性和可靠性; 5)论文字数1.5~2万字,并完成相关英文资料5000字的翻译。 参考文献资料不少于8篇,其中外文资料不少于2篇,中英文摘要约300字,关键词3-5个。 指导教师签字: ┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊┊┊┊┊┊┊订┊┊┊┊┊┊┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊┊┊ ┊ ┊ ┊ 安徽工业大学 毕业设计[论文]说明书 摘 要 随着我国信息产业发展迅速以及中国加入世界贸易组织,国内银行之间以及与外国银行之间的竞争也越来越激烈,怎样发展业务以吸引更多顾客是各银行面队的当务之急。而账目管理是银行业务流程过程中十分重要且必备的环节之一,在银行业务流程当中起着相当重要的作用。现在银行的业务越来越多,吸引的客户也越来越多,银行账目的管理就越显重要。 银行账目管理系统是针对银行账目的日常管理而设计。银行账目管理系统不仅要求操作方便而且要求界面简洁,它还需要实现用户开户、账目管理和查询统计功能。 针对上述情况和要求,采用软件工程的开发原理,依据软件流程过程规范,按照需求分析、概要设计、详细设计、程序编码、测试等过程开发了一个银行账目管理系统。采用JAVA作为编程语言,使用工具eclipse3.1设计实现了银行账目管理系统,完成系统管理、账目管理、查询统计、用户查询等功能。 关键词:用户开户;账目管理;查询统计;JAVA;Eclipse3.1 I Abstract Along with our country of information industry is developing quickly and China has acceded to WTO, many banks have to compete against each other for attracting customers. How to develop the business to attract more customers is the urgent matter that each bank confronts.Bank account management is a very most part of the process of the bank business. It plays a key role in the process of bank business. The business of the bank is more and more at present so that the customers of the bank are more and more too. The management of the bank account is very for customers. The bank account management system is a usual management to aim at the bank account to design. This operate system not only operates conveniently but also the interface is succinct, and the system needs to achieve some functions such as open an account,account management, search statistics etc. function. Aiming at the above circumstance, presents a practical method to implement a bank account management system based on software engineering ,according to the software process such as analyze the need, essentials design, detailed design, program, test, etc. Adopt JAVA programming language and use the tool of eclipse3.1 to design the bank account management system. It can complete system management, account management, search statistics, customer search etc. function. Key words: Open an account; Account management; Search statistics; JAVA; Eclipse3.1 目 录 第一章 引言 1 1.1 开发背景 1 1.2 开发意义 1 1.3 章节安排 2 第二章 系统需求分析 3 2.1 银行账目管理系统的需求 3 2.2 用户对系统的期望 3 2.3 编程语言和运行环境介绍 3 2.3.1 Java语言 3 2.3.2 Eclipse开发平台 4 2.3.3 ORACLE数据库 5 第三章 功能模块设计 6 3.1 银行账目管理功能模块 6 3.2 功能模块介绍 6 第四章 系统设计 8 4.1总体设计 8 4.1.1 数据库表 8 4.1.2 几种布局 9 4.1.3 类关系 11 4.1.4 客户端和服务器之间的通信 13 4.2 详细设计 15 4.2.1操作主界面设计 15 4.2.2 开户面板的设计与实现 16 4.2.3登录面板的设计与实现 17 4.2.4交易面板的设计与实现 18 4.2.5信息修改面板的设计与实现 22 4.2.6忘记密码面板的设计与实现 23 4.2.7查询面板的设计与实现 23 4.2.8统计面板的设计与实现 25 4.2.9销户面板的设计与实现 26 第五章 测试 28 5.1 Java运行平台简介 28 5.2 系统测试 28 5.2.1 用户开户功能 28 5.2.2 交易功能 29 5.2.3 信息修改 33 5.2.4 查询 33 5.2.5 统计 34 致 谢 35 参考文献 36 附 录 37 III 第一章 引言 1.1 开发背景 随着科技发展和社会进步,尤其是计算机大范围的普及,计算机应用逐渐由大规模科学计算的海量数据处理转向大规模的事务处理和对工作流的管理,这就产生了以台式计算机为核心的管理信息系统在大规模的事务处理和对工作流的管理等方面的应用,在银行账目管理之中的应用日益增加。 近年来我国信息产业发展迅速,手工管理方式在银行账目管理等需要大量事务处理的应用中已显得不相适应,采用IT技术提高服务质量和管理水平势在必行。目前,对外开放必然趋势使银行业直面外国银行巨头的直接挑战,因此,银行必须提高其工作效率,改善其工作环境。这样,账户管理的信息化势在必行。 在传统的银行账户管理中,其过程往往是很复杂的,繁琐的,账户管理以入账和出账两项内容为核心,在此过程中又需要经过若干道手续,因为整个过程都需要手工操作,效率十分低下,且由于他们之间关联复杂,统计和查询的方式各不相同;且会出现信息的重复传递问题,因此该过程需要进行信息化,以利用计算机进行账目管理。 系统开发的整体任务是实现银行账户管理的系统化、规范化、自动化和智能化,从而达到提高企业管理效率的目的。 1.2 开发意义 随着社会的进步和计算机技术的发展,尤其是网络技术的飞速进步,信息观念已经深入人心。信息科学作为当代社会中的重要一环在国民经济中起着举足轻重的作用。在中国经济蓬勃发展的今天,越来越庞大的储蓄用户数目和资金流通量对银行账目管理的可靠性每天都在进行苛刻的考验。建立和发展功能较完善的银行账目管理系统,不仅可以服务客户、联系客户、吸引客户、稳定客户,巩固银行业务经营基础,而且通过服务社会,可以塑造银行自身的市场形象,体现银行的综合实力还能够提高银行的存款总量;通过提供高效,优质的业务,吸引更多的客户来银行办理业务,从而扩大了银行的客户群,加强了银行和客户的业务联系,也会带动其他业务的发展。总之,现代商业银行的竞争和发展,已突破传统业务的框架,为了提高银行的业务竞争能力,扩大客户群,培育新的利润增长点,务必大力改良其账目管理系统,因此建立一个功能齐全可靠的账目管理系统成为银行当前业务发展的迫切之需。 1.3 章节安排 第二章对此系统的需求分析,对系统的一些功能概述。 第三章对此系统的功能模块的介绍。 第四章是对此系统的详细设计,以及部分重要代码。 第五章是对系统的测试,以及编程过程中遇到的一些问题以及解决办法。 第二章 系统需求分析 2.1 银行账目管理系统的需求 通过与银行工作人员交流了解:随着银行业务的推陈出新以及这些业务为客户带来的便利,使银行吸引了越来越多的客户,一切都使银行账目的管理越来越重要。 银行账目管理系统是针对银行账目的日常管理而设计。银行操作系统不仅要求操作方便而且要求界面简洁,它需要实现用户开户、账目管理、信息修改、忘记密码、查询、统计以及销户等功能。其中账目管理包括存款、取款、申请贷款、还贷款和设置透支额度的功能。用户可以通过不同的方式来查询需要的信息。通过该系统的设计实现,使银行部门更好地进行业务管理,为客户提供更佳优质的服务。 2.2 用户对系统的期望 银行对账目管理系统的要求主要有以下几个方面: (1)系统能够完成银行账目管理系统的主要功能; (2)系统界面简洁,容易操作; (3)具有一定的稳定性,安全性; (4)访问速度快。 2.3 编程语言和运行环境介绍 2.3.1 Java语言 银行账目管理系统采用Java语言进行编程。Java语言是一种很优秀的语言,是目前软件设计中极为壮健的编程语言,只要提供了Java解释器,Java编写的软件在执行码上兼容。Java作为一种程序设计语言,它简单、面向对象、不依赖于机器的结构、具有可移植性、安全性、并且提供了并发的机制,具有很高的性能。其次,它最大限度地利用了网络,Java的小应用程序(applet)可在网络上运行而不受CPU和环境的限制。另外,Java还提供了丰富的类库,使程序设计者可以很方便地建立自己的系统。 通过分析Java的特点,进一步指出它所具有的优点。 Java语言有下面一些特点:简单、面向对象、与平台无关、解释执行、多线程、安全、动态性。 (1) 简单:Java语言是一种面向对象的语言,它通过提供最基本的方法来完成指定的任务,只需理解一些基本的概念,就可以用它编写出适合于各种情况的应用程序。Java略去了运算符重载、多重继承等模糊的概念,并且通过实现自动垃圾回收,大大简化了程序设计者的内存管理工作。 (2) 面向对象:Java语言的设计集中于对象及其接口,它提供了简单的类机制以及动态的接口模型。对象中封装了它的状态变量以及相应的方法,实现了模块化和信息隐藏;而类则提供了一类对象的原型,并且通过继承机制,子类可以使用父类所提供的方法,实现了代码的复用。 (3) 与平台无关:Java解释器生成与体系结构无关的字节码指令,只要安装了Java运行时系统,Java程序就可在任意的处理器上运行。这些字节码指令对应于Java虚拟机中的表示,Java解释器得到字节码后,对它进行转换,使之能够在不同的平台运行。 (4) 解释型:Java解释器直接对Java字节码进行解释执行。字节码本身携带了许多编译时信息,使得连接过程更加简单。 (5) 多线程:Java还有一特点就是内置对多线程的支持。多线程支持完成多个任务。 (6) 安全:用于网络、分布环境下的Java必须要防止病毒的入侵。Java不支持指针,一切对内存的访问都必须通过对象的实例变量来实现,这样就防止程序员使用“特洛伊”木马等欺骗手段访问对象的私有成员,同时也避免了指针操作中容易产生的错误。 (7) 动态:Java的设计使它适合于一个不断发展的环境。在类库中可以自由地加入新的方法和实例变量而不会影响用户程序的执行。并且Java通过接口来支持多重继承,使之比严格的类继承具有更灵活的方式和扩展性。 2.3.2 Eclipse开发平台 Eclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。 虽然大多数用户很乐于将Eclipse当作Java集成开发环境(IDE)来使用,但Eclipse的目标却不仅限于此。Eclipse还包括插件开发环境(Plug-in Development Environment,PDE),这个组件主要针对希望扩展Eclipse的软件开发人员,因为它允许他们构建与Eclipse环境无缝集成的工具。由于Eclipse中的每样东西都是插件,对于给Eclipse提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。这种平等和一致性并不仅限于Java开发工具。尽管Eclipse是使用Java语言开发的,但它的用途并不限于Java语言;例如,支持诸如C/C++、COBOL、PHP等编程语言的插件已经可用,或预计将会推出。Eclipse框架还可用来作为与软件开发无关的其他应用程序类型的基础,比如内容管理系统。 基于Eclipse的应用程序的一个突出例子是IBM Rational Software Architect,它构成了IBM Java开发工具系列的基础。 从2006年起,Eclipse基金会每年都会安排同步发布(simultaneous release)。至今,同步发布主要在6月进行,并且会在接下来的9月及2月释放出SR1及SR2版本。 2.3.3 ORACLE数据库 ORACLE 是以高级结构化查询语言(SQL)为基础的大型关系数据库,通俗地讲它是用方便逻辑管理的语言操纵大量有规律数据的集合。是目前最流行的客户/服务器(CLIENT/SERVER)体系结构的数据库之一。 ORACLE数据库在逻辑上是由许多表空间构成。主要分为系统表空间和非系统表空间。非系统表空间内存储着各项应用的数据、索引、程序等相关信息。我们准备上马一个较大的ORACLE应用系统时,应该创建它所独占的表空间,同时定义物理文件的存放路径和所占硬盘的大小。 Oracle数据库跟其他的数据库一样,具有数据库系统的通用性: (1) 数据库管理系统。我们知道,所谓的数据库就是一些结构化的数据的联合体,要提供对这些数据的存取、增加、修改、删除或更加复杂的数据抽取等操作,需要有一个支撑系统,这就是数据库管理系统(DBMS),Oracle完全具有这方面的功能。 (2) 关系型数据库管理系统。在数据库的发展历程中,曾出现过多种不同形式的数据库系统,但关系型数据库管理系统(RDBMS)以其优越性而被广为采用,象现在几种广泛使用的数据库全为关系型数据库。同样,Oracle也是关系型的数据库系统,支持标准的结构化查询语言(Structured Query Language)。 (3) 开放源码数据库。同商业性的数据库相比,这是Oracle最大的特点。Oracle的源码是公开的,这就意味着任何人,只要遵守GPL的规则都可以对Oracle的源码使用、修改以符合自己特殊的需求。 (4) 技术特点。Oracle是C/S架构的服务器,服务器端是多线程的,为客户端提供了不同的程序接口和链接库,如C、C++、Java、Perl、PHP、Tcl等,也提供了简单的管理工具。 第三章 功能模块设计 3.1 银行账目管理功能模块 银行账目管理系统 用户开户 信息修改 忘记密码 查 询 统 计 销 户 用户登录 存 款 取 款 申 请 贷款 还 贷 款 设置透支额度 用户 姓 名 身份证号 联系电话 家庭住址 贷款信用账户 信用账户 贷款储蓄账户 储蓄账户 总账户 图3.1 银行账目管理系统模块图 3.2 功能模块介绍 银行账目管理系统包括七个模块,分别为用户开户、账目管理、信息修改、忘记密码、查询、统计和销户。其具体的功能如下: (1)用户开户:新建一个账户,为其指定一个唯一的账号来标志该用户。 (2)账目管理:账户分为四种类型,分别是储蓄账户、信用账户、贷款储蓄账户和贷款信用账户。用户成功登录之后,储蓄账户可以存款和取款;信用账户可以存款、取款和设置透支额度;贷款储蓄账户可以存款、取款、申请贷款和还贷款;贷款信用账户可以存款、取款、申请贷款、还贷款和设置透支额度。 (3)信息修改:选择一个存在的账户,然后输入密码经确认后进入用户信息窗口,可对里面的账户类型、账户密码、用户姓名、身份证号、家庭住址、联系电话和电子邮箱进行修改,而账号和账户上的金额不能被用户修改。 (4)忘记密码:选择一个存在的账户,输入新密码和密码重复,密码前后一致即可更改该账户的密码。 (5)查询:按照指定方式进行查找账户信息,包括按姓名、身份证号和电话进行查找,也可以按照地址进行模糊查找。 (6)统计:对银行的数据进行统计,如对账户数量的统计。 (7)销户:将指定用户的账号删除。用户输入密码经过验证成功后,把账户的余额全部取出,最后删除该账户。 第四章 系统设计 4.1总体设计 4.1.1 数据库表 account表用来存放账户的信息,包括账户类型(type)、账号(id)、密码(password)、账户姓名(name)、身份证号(personId)、家庭住址(address)、联系电话(phone)、电子邮箱(email)、账户余额(balance)等8个字段,其中,账号是主键。账户类型、账号和账户余额为数字类型,其它的字段为字符串类型,所有的字段都不能为空。如表4.1所示。 表4.1:account 字符名 数据类型 是否允许空 备注 type number 否 账户类型 id number 否 账号(主键) password varchar2(50) 否 账户密码 name varchar2(30) 否 账户姓名 personId varchar2(30) 否 身份证号 address varchar2(50) 否 家庭地址 phone varchar2(30) 否 联系电话 email varchar2(50) 否 电子邮箱 balance number 否 账户余额 loan_account表是用来存放贷款账户贷款额的信息,包括账号(id)和贷款额(loan)两个字段,其中,账号是主键。账号和贷款额这两个字段都是数字类型,都不能为空。如表4.2所示。 表4.2:loan_account 字符名 数据类型 是否允许空 备注 id number 否 账号(主键) loan number 否 贷款额 credit_account表是用来存放信用账户透支额度的信息,包括账号(id)和透支额度(ceiling)两个字段,其中,账号是主键。账号和透支额度这两个字段都是数字类型,都不能为空。如表4.3所示。 表4.3:credit_account 字符名 数据类型 是否允许空 备注 id number 否 账号(主键) ceiling number 否 透支额度 count_account表是用来存放各种账户类型的人数,包括储蓄账户人数(cSaving)、信用账户人数(cCredit)、贷款储蓄账户人数(cLoanSaving)和贷款信用账户人数(cLoanCredit)。表中四个字段都是数字类型,都不能为空。如表4.4所示。 表4.4:count_account 字符名 数据类型 是否允许为空 备注 cSaving number 否 储蓄账户人数 cCredit number 否 信用账户人数 cLoanSaving number 否 贷款储蓄账户人数 cLoanCredit number 否 贷款信用账户人数 4.1.2 几种布局 (1) BorderLayout布局 BorderLayout布局是Window容器的默认布局。JFrame、JDialog都是Window类的间接子类,他们的内容面板的默认布局都是BorderLayout布局。BorderLayout布局也是一种简单的布局策略,如果一个容器使用这种布局,那么容器空间简单地划分为东、西、南、北、中五个区域,中间的区域最大。每加入一个组件都应该指明把这个组件添加在哪个区域中,区域由BorderLayout中的静态常量CENTER、NORTH、SOUTH、WEST、EAST表示。例如,一个使用BorderLayout布局的容器con,可以使用add()方法将一个组件b添加到中心区域: con.add(b, BorderLayout.CENTER); 或 con.add(BorderLayout.CENTER,b); 添加到某个区域的组件将占据整个这个区域。每个区域只能放置一个组件,如果向某个已放置组件的区域再放置一个组件,那么先前的组件将被后者替换。使用BorderLayout布局的容器最多能添加5个组件,如果容器中需要添加的组件超过5个,就必须使用容器的嵌套或改用其他布局策略。 (2) GridLayout布局 GridLayout是使用较多的布局编辑器,其基本布局策略是把容器划分成若干行若干列的网格区域,组件就位于这些划分出来的小格中。GridLayout比较灵活,划分多少网格由程序自由控制,而且组件定位比较精确。使用GridLayout布局编辑器的一般步骤如下: ①使用GridLayout的构造方法GridLayout(int m,int n)创建布局对象,指定划分网格的行数m和列数n。例如: GridLayout grid=new GridLayout(10,8); ②使用GridLayout布局的容器调用方法add()将组件加入容器,组件进入容器的顺序将按照第一行第一个、第一行第二个……第一行最后一个、第二行第一个……最后一行第一个……最后一行最后一个。 使用GridLayout布局的容器最多可添加m*n个组件。GridLayout布局中每个网格都是相同大小,并且强制组件与网格的大小相同。 由于GridLayout布局中每个网格都是相同大小,并且强制组件与网格的大小相同,使得容器中容器中的每个组件也都是相同的大小,显得很不自然。为了克服这个缺点,可以使用容器嵌套。例如,一个容器使用GridLayout布局,将容器分为三行一列的网格,那么可以把另一个容器添加到某个网格中,而添加的这个容器又可以设置为GridLayout布局、FlowLayout布局、CardLayout布局或BorderLayout布局等。利用这种嵌套方法,可以设计出符合一定需要的布局。 (3) CardLayout布局 使用CardLayout容器可以容纳多个组件,但实际上同一时刻容器只能从这些组件中选出一个来显示,就像一叠“扑克牌”每次只能显示最上面的一张一样,这个被显示的组件将占据所有的容器空间。 JTabbedPane创建的对象是一个轻容器,称为选项卡窗格。JTabbedPane窗格的默认布局是CardLayout布局,并且自带一些选项卡(不需用户添加),这些选项卡与用户添加到JTabbedPane窗格中的组件相对应,也就是说,当用户向JTabbedPane窗格添加一个组件时,JTabbedPane窗格就会自动指定给该组件一个选项卡,单击该选项卡,JTabbedPane窗格将显示对应的组件。选项卡窗格自带的选项卡默认在该选项卡窗格的顶部,从左到右一次排列,选项卡的顺序和所对应的组件的顺序相同。 JTabbedPane窗格可以使用 add(String text,Component c); 方法将组件c添加到JTabbedPane窗格中,并指定和组件c对应的选项卡的文本提示是text。 使用JTabbedPane窗格的构造方法 public JTabbedPane(int tabPlacement) 创建的选项卡窗格的选项卡的位置由参数tabPlacement指定,该参数的有效值为JTabbedPane.TOP、JTabbedPane.BOTTOM、JTabbedPane.LEFT、JTabbedPane.RIGHT。 4.1.3 类关系 SavingAccount类和CreditAccount类都继承了Account类,Account类中有一个final修饰的存款方法deposit(double money)和一个抽象的取款方法withdraw(double money),SavingAccount类和CreditAccount类实现了取款方法。 LoanSavingAccount类和LoanCreditAccount类分别继承了SavingAccount类和CreditAccount类,LoanSavingAccount类和LoanCreditAccount类都继承了Loanable接口,在Loanable接口中有贷款方法requestLoan(double money)、还贷方法payLoan(double money)和得到贷款的方法getLoan(),LoanSavingAccount和LoanCreditAccount类都实现了这三种方法。 定义了10个面板类,分别是图片面板PicturePanel、注册面板RegisterPanel、登录面板LoginPanel、交易面板BusinessPanel、登录修改面板LoginModifyPanel、修改信息面板ModifyPanel、新密码面板NewPassPanel、查询面板InquiryPanel、统计面板StatisticsPanel和销户面板CancelPanel。BAMClient类中定义了这10个面板类的变量,并且将这10个面板类的变量以CardLayout布局格式存入一个JFrame窗体中,当用户单击窗体中的按钮时,就显示相应的面板,当用户单击这些面板中的按钮时,就调用相应的方法。BAMClient类定义的方法有: // 窗体中部分对象监听方法 public void addListeners() {…} // 1、开户 public void register() {…} // 2、登录 public void login() {…} // 3、交易 public void business() {…} // 4、登录修改信息 public void loginModify() {…} // 5、修改信息 public void modify() {…} // 6、忘记密码 public void newPass() {…} // 7、查询 public void inquiry() {…} // 8、统计 public void statistics() {…} // 9、销户 public void cancel() {…} BAMServer类是服务器的一个类,在该类里声明了线程类ServerThread的变量,当客户端和服务器连接建立时,就调用ServerThread中的run()方法。run()方法负责判断客户端发来的操作类型是什么,是注册、登录、取款等等,并且获取操作的信息,如账号,然后根据操作类型调用Bank类中相应的方法,由Bank类负责将数据写进数据库、从数据库中将信息取出和更新数据库中的信息。Bank类中的方法有: // 根据id获取Account对象 public Account getAccount(long id) {…} // 注册 public Account registerAccount(int type,String password,String name,String personId,String address,String phone,String email,double balance) {…} // 将账户信息写进数据库 public void writeToDB(Account account) {…} // 登录 public Account loginAccount(long id) {…} // 存款 public Account depositAccount(long id,double money) {…} // 取款 public Account withdrawAccount(long id,double money) throws BusinessException {…} // 设置透支额度 public Account setCeilingAccount(long id,double money) {…} // 贷款 public Account requestLoan(long id,double money) {…} // 还贷 public Account payLoan(long id,double money) throws BalanceNotEnoughException,LoanException {…} // 修改信息 public int modifyAccount(int type,long id,String password,String name,String personId,String address,String phone,String email) {…} // 忘记密码 public Account newPassAccount(long id,String password) {…} // 查询 public LinkedList<Account> inquiry(int ok,String key) {…} // 统计 public HashMap<String,Integer> statistics() {…} // 销户 public int cancelAccount(long id,String password) {…} 4.1.4 客户端和服务器之间的通信 IP地址标识Internet上的计算机,端口号标识正在计算机上运行的进程(程序)。端口号与IP地址的组合得出一个网络套接字(Socket)。端口号被规定为一个16位的整数0~65535。其中,0~1023被预先定义的服务通信占用(如telnet占用端口23,http占用端口80等)。除非我们需要访问这些特定服务,否则就应该使用1024~65535这些端口中的某一个进行通信,以免发生端口冲突。当两个程序需要通信时,他们可以通过使用Socket类建立套接字对象并连接在一起。比如,有人让你去“中山广场邮局”,你可能反问“我去做什么”,因为他没有告诉你“端口”,你不知处理何种业务。他说“中山广场邮局,8号窗口”,那么你到达地址“中山广场邮局”,找到“8号”窗口,就知道8号窗口处理特快专递业务,而且必须有个先决条件,就是你到达“中山广场邮局8号窗口”时,该窗口必须有一位业务员在等待客户,否则就无法建立通信业务。 (1)套接字连接 需要注意的是,从套接字连接中读取数据与从文件中读取数据有着很大的不同,尽管二者都是输入流。从文件中读取数据时,所有的数据都已经在文件中了。而使用套接字连接时,可能在另一端数据发送出来之前,就已经开始试着读取了,这就会堵塞本线程,直到该读取方法成功读取到信息,本线程才继续执行后续的操作。 连接建立后,服务器端的套接字对象调用getInetAddress()方法可以获取一个InetAddress对象,该对象含有客户端的IP地址和域名。同样,客户端的套接字对象调用getInetAddress()方法可以获取一个InetAddress对象,该对象含有服务器端的IP地址和域名。 (2)套接字关闭 套接字调用close()方法可以关闭双方的套接字连接,只要一方关闭连接就 会导致对方发生IOException异常。代码如下: public class BAMServer {// 服务端 public static void main(String[] args) { ServerSocket server=null; try { server=new ServerSocket(9007); Socket socket=server.accept(); ServerThread thread=new ServerThread(socket); thread.start(); } catch (IOException e) { e.printStackTrace(); } } } public class ServerThread extends Thread { Socket socket; ObjectInputStream in; ObjectOutputStream out; public ServerThread(Socket socket) { this.socket=socket; } public void run() { try { out=new ObjectOutputStream(socket.getOutputStream());// 注意out和in的先后顺序 in=new ObjectInputStream(socket.getInputStream()); while(true) { …… } } catch (IOException e) {} } } public class BAMClient { // 客户端 ObjectInputStream in; ObjectOutputStream out;
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 初中其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服