论文-090-基于java网络技术实现网络聊天室内容摘要:
应该是用户程序可见的类。 为此用户程序需要用 import 语句引入它所有用到的系统类或系统类所在的包。 系统定义的类虽然实现了许多常见的功能,但是用户程序仍然需要针对特定问题的特定逻辑来定义自己的类。 用户程序定义自己的类有定义类头和定义类体两个 步骤,类体又由属性和方法组成。 2. Java 组网的基础是 包和 包。 包提供通过数据流、序列化和文件系统的系统输入与输出类。 包提供实现网络应用程序的类,用它的类建立依赖于 TCP/IP 与UDP 的应用程序。 (1) 7 Java的输入输出功能必须要借助于输入输出库 ,这个包中的类大部分是用来完成流式输入输出的流类 ,它是 Java语言的标准输入 /输出类库,包含了实现 Java程序与操作系统、 用户界面以及其他 Java程序做数据交换所用的类,如基本输入 /输出流、文件输入 /输出流、过滤输入 /输出流、管道输入 /输出流、随机输入 /输出流等。 流式输入输出是一种很常见的输入输出方式,它最大的特点是数据的获取和发送均沿着数据序列顺序进行,每一个数据都必须等待排在它前面的数据读入或送出之后才能被读写,每次读写操作处理的都是序列中剩余的未读写的数据中的第一个,而不能够随意选择输入输出的位置。 Java 中最基本的流类有两个:一个是基本输入流 InputStream,另一个是基本输出流OutputStream。 这是两 个具有最基本的输入输出功能的抽象类,其他所有输入输出类都是继承了它们的子类。 基本输入输出流是定义了基本的输入输出操作的抽象类,在 Java中真正使用的是他们的子类,对应不同数据源和输出任务,以及不同的输入输出。 下面介绍两个具体的。 DataInputStream 类和 DataOutStream 类分别是过滤输入输出流 FilterInputStream 和FilterOutputStream两个抽象类的子类。 过滤输入输出流的主要特点是在输入输出数据的同时能对所传输的数据做指定类型或格式的转换,即可实现对二进制字节数据 的理解和编码转换。 过滤输入输出流的最主要作用就是在数据源和程序之间加一个过滤处理步骤,对原始数据做特定的加工、处理和变换操作。 这两个类的方法有很多,我们可以到 API的参考文件里面查找。 (2) 包提供网络的应用,通过创建一些接口或者与接口的连接,或者通过利用URL(Uniform Resource Locator 统一资源定位器 )和 Inter地址,具有与其他信息资源通信的能力。 由于 Java语言还在不停的发展和扩充,它的功能,尤其是网络功能,也在不断地扩充。 目前已经实 现的 Java 网络功能主要有:底层网络通信,如实现套接字通信的 Socket 类、ServerSocket类;编写用户自己的 Tel(远程登陆 )、 FTP(文件传输协议 )、邮件服务等实现网上通信的类;用于访问 Inter上资源和进行 CGI网关调用类,如 URL等。 ① IAddress类 IAddress类是 Java网络编程中经常用到的类, IAddress类主要用来区分计算机网络中的不同节点,即不同的计算机并对其进行寻址。 每个 IAddress对象中包含了 IP地址、主机名等信息。 ② Socket 类 Socket 类是 Java 的基础类,用于执行客户端的 TCP 操作。 该类本身用本机代码来和主机操作系统的本机 TCP 堆栈通信。 Socket 类的方法建立和拆除连接,并且设置各个套接字选项。 Socket 类提供给程序员的接口是数据流,真正整个套接字数据的读写都是经由类似的数据流类来完成的。 Java 提供了客户端联机的 Socket 类,我们可以利用它来产生类实例,在实例生成的同时也会建立与远程计算机的联机,之后只要调用 Socket 对象的一些方法,就可以完成联机,而无需处理底层的 TCP/UDP 确认、重发等机制。 使用 Socket 建立对象时,一定要指明本机地址与端口,如果没有指定本机地址与端口,则程序会自动挑选地址与端口(随机挑选)。 在联机之后,如果不使用联机时最好能主动关闭联机,也就是销毁 Socket 对象。 ③ ServerSocket 类 ServerSocket 类包含了用 Java 编写服务器程序的所有内容,包括创建新的 ServerSocket 对象的构造器,在指定端口监听连接方法,以及连接建立后可以发送了接收数据时返回 Socket对象的方法等。 Socket类是 Java用来处理客户端联机所提供的类,如果想制作一个服务器程序 ,就必须使 8 用 ServerSocket 类。 服务器端程序与客户端不同的是服务器端程序会先执行并等待客户端与它进行联机。 ServerSocket 类与 Socket类的操作方式类似,它最大的不同之处是多了 accept()方法,当执行这个方法是,程序将会暂停并倾听客户端的联机,直到客户端联机之后再继续往下执行。 由于服务器不会只执行一次就终止程序,所以要使用循环来控制服务器端的执行,在服务器每完成一个联机之后,就关闭联机,然后使用 accept()方法重新倾听联机。 一台计算机可以同时提供多个服务,这些不同服务之间通过端口 号来区别,不同的端口号可以提供不同的服务, Client 连接到哪个端口,就可以接受哪个端口提供的服务。 ④ DatagramPacket 类 DatagramPacket 类代表无连接协议中的数据报。 被发送的数据报包含目的方地址及内容。 接收到的数据报包含发送源地址及其内容。 DatagramPacket 为收发数据报构造 DatagramPacket实例, getAddress()获取包的目的地址或源地址, GetData()获取包的内容, GetLength()获取包的长度, GetPort()获取包的目的方端口。 ⑤ DatagramSocket 类 DatagramSocket类在使用数据报套接字通信的客户机 /服务器的应用中,服务器对一个“公认”端口创建一个数据报套接字。 客户机通过惯例或者一种能把服务名称映射为端口号的命名来获知这些端口。 然后服务器等候客户机向这个端口发送数据报。 当它收到一个数据报时就进行处理。 并在适当情况下向客户机发回应答。 DatagramSocket 用于创建数据报套接字, close()关闭数据报套接字, Receive()从套接字接收数据报, Send()通过套接字向目的方发送数据报。 getLocalPort()获取套接字绑定的本端口号, finalize()当此数据报套接字被当作垃圾回收时关闭它。 (三 ) Java多线程机制( Thread类) 在介绍线程的概念,首先要知道什么是进程( Process)。 简单的说,进程指的就是正在执行中的程序( a running program)。 我们可能常听到多任务( Multitasking)这个名字,例如 Windows系统是支持多任务执行的系统,换句话说在 Windows 系统中可以同时具有多个进程。 事实上不只是 Windows 系统,许多其他的系统都具有执行多个任务的能力(如 Linux、Unix),就好像我们常在 Windows 系统中同时在执行多个程序,比如您可以启动记事本来编辑JAVA 程序、一个 MS— DOS 模式窗口用来便宜程序和一个 IE 来执行 Applet,这数个正在执行中的程序就是所谓的进程,他们存在于内存之中。 在多任务系统中一个进程通常由数个线程( Thread)所组成(也可能只由单一线程所组成),您可以把线程想成是进程中的进程,因为它必须依附进程而存在,是在进程所拥有的系统资源中执行,也就是说线程是无法单独存在的。 因此线程也常被称作是轻量化进程( lightweight process),如图 (3)。 线程有一个非常重要的特点,就是在同一个进程中的多个线程可以同时执行,默认情况下每一个 Applet 程序中至少都有两个线程在同时执行,一个用来完成您的需求(执行程序代码),另一个用来进行垃圾收集( Garbage Collection)。 多任务系统(例如 Windows、 Linux) 图 (3) 多任务系统图 进程 A 进程 B 进程 C 线程 1 线程 2 线程 3 线程 1 线程 2 线程 1 9 以往我们所开发的程序,大多是单线程的,即一个程序只有一条从头至尾的执行路线。 然而现实世界中的很多过程都具有多种途径同时运作:例如生物的进 化,就是多方面多种因素共同作用的结果;再如服务器可能需要同时处理多个客户机的请求,等等。 Java 中编程实现多线程应用有两种途径:一种是创建拥护自己的线程子类,一种是在用户自己的类中实现 Runnable 接口。 无论哪种方法,都需要使用到 Java 基础类库中的 Thread 类及其方法。 (四 ) 用 Java 实现底层网络通信 套接字( Socket)是 TCP/IP 协议的编程接口,即利用 Socket提供一组 API就可以编程实现TCP/IP 协议,在 Java 语言里,这个编程接口就是若干系统预先定 义好的类。 流式 Socket 的通信机制,流式 Socket 所完成的通信是一种基于连接的通信,即在通信开始之前先由通信双方确认身份并建立一条专用的虚拟连接通道,然后它们通过这条通道传送数据信息进行通信,当通信结束时再将原先所建立的连接拆除。 这个过程可以用图 (4)表示。 Server 端 Client 端 ↓ 创建 ServerSocket对象,在某 端口提供监听服务 ↓ ↓ 等待来自 Client端 的服务请求 ↓ 接收 Client 端的请求,用返回 ←→ 创建 Socket对象,向 Server的 的 Socket 建立连接 监听端口请求 ↓ ↓ 通过向 Socket中读写数据 ←→ 通过向新 Socket中读写数据来 来与 Client端通信 与 Server端通信 ↓ 关闭 Socket,结束与当前 ↓ Client的通信,等待其他请求 ←→ 关闭 Socket,结束与 Server端的 ↓ 通信 关闭 ServerSocket对象结束 监听服务 图 (4) 流式 Socket 通信过程 基于连接的通信可以确保整个通信过程准确无误,同时在通信过程中始终保持连接,所以适合于集中、连续的通信。 例如网络聊天。 流式 Socket 可以实现准确的通信,但是占用资源较多,在某些无须实时交互的情况下,例如收发电子邮件等,采用保持连接的流式通信并不恰当,而应该使用这种无连接的数据报方式。 数据报是无连接的远程通信服务,数据以独立的包为单位发送,不保证传送顺序和内容的准确性。 数据报 Socket 又称 UDP 套接字,它无须建立、拆除 连接,直接将信息打包传向指定的目的地,使用起来比流式要简单一些。 Java 中用于无连接的数据报通信的类有两个: DatagramPacker类和 DatagramSocket 类。 其中 DatagramPacker类用于读取数据等消息, DatagramSocket类用于实现数据报的发送和接收过 10 程。 (五 ) 异常处理 异常( Exception)又称为例外,是特殊的运行错误对象,对应着 Java 语言特定的运行错误处理机制。 由于 Java程序是在网络环境中运行的,安全成为需要首先考虑的重要因素之一。 为了能够及时有效地处理程序 中的运行错误, Java 中引入了异常和异常类。 Java 中定义了很多异常类,每个异常类都代表了一种运行错误,类中包含了该运行错误的信息和处理错误的方法等内容。 每当 Java 程序运行过程中发生一个可识别的运行错误时,就有一个异常类与之相对应,系统都会产生一个相应的该异。论文-090-基于java网络技术实现网络聊天室
相关推荐
ava 平台包括两部分内容: Java 虚拟机和 JavaAPI。 JSP 简介 JSP( Java Server Pages)是由 Sun Microsystems 公司倡导、许多公司参与一起建立的一种 动态网页技术标准, JSP 技术在 Servlet 技术基础上发展起来的,它正在飞速发展中,现已成为 Java 服务器编程的重要组成部分。 它虽然还未成型,但是它必将和 J2EE(Java 2
/年 小批量生产 ( 1)毛坯采用铸造,精度适中,加工余量相对较大 ( 2)加工设备采用车床、铣床、钻床 ( 3)加工设备采用组合夹具 ( 4)工艺需编制详细的加工工艺过程卡片和工序卡片 ( 5)生产效率低,对人工的技术要求高 3 毛坯的确定 确定毛坯类型及其制造方法 有附表 5《常见毛坯类型》可知,材料为 HT200,可确定毛坯类型为铸件。 估算毛坯的机械加工余量 根据毛坯的最大轮廓尺寸(
,还要考虑按揭贷款比例问题。 因为按揭贷款比例越高,对借款人压力越大,在高按揭贷款比例下一旦借款人违约,银行处分抵押房产所得扣除各项支出后,有可能不足以弥补银行的支出。 加之,住房按揭贷款的期限一般较长,而按揭贷款的资金来源主要是储蓄存款和企事 业单位的短期存款,这就产生了以短期资金负担长期贷款的风险,并在一定程度上影响银行对短期资金的有效利用。 况且银行对信贷资金的市场投放及运作效率缺乏监管
urgent_pointer = ntohs(tcp_protocoltcp_urgent_pointer)。 /* 紧急指针 */ flags = tcp_protocoltcp_flags。 /* 标识 */ checksum = ntohs(tcp_protocoltcp_checksum)。 /* 校验和 */ printf( TCP协议 \n)。 printf(源端口号:%d\n,
机上运行,输入服务器主机的 IP,连接到服务器,客户端与客户端之间即可实现简易的聊天功能,在服务器可以显示在线人数以及客户端的 IP地址。 4 基于 TCP 协议聊天软件的制作过程 一 、 客户端工作原理 在运行服务器之后,运行客户端。 客户端首先向服务器提出建立连接请求,然后建立一个套接字描述符,通过该描述符调用数据传输函数即可与服务端进行数据的收发。 用户登录成功后,向服务器发送登陆消息
先飞,尚可领先。 但是,人生之路不一定都是顺境与成功,也有逆境和失败。 我们要有良好的心态,把所 有经历当作人生财富,知难而进。 第四、善于合作、乐于奉献 我们对待繁重、高难度的新工作,要谦虚谨慎,戒骄戒躁,主动向老同志求教,虚心听取别人意见。 工作中,要有宽广的胸怀,要有容人、容言、容事之大气量。 现在这个浮躁的社会,大家都带着有色眼镜看待公务员。 而我们作为新进公务员,不必理会外人的眼光