聊天设计与开发_第1页
聊天设计与开发_第2页
聊天设计与开发_第3页
聊天设计与开发_第4页
聊天设计与开发_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1网络编程网络编程 - -聊天室的设计与开发聊天室的设计与开发2第第2讲讲 网络编程网络编程p 客户机和服务器客户机和服务器p 基于基于SocketSocket的网络编程的网络编程p 基于基于UDPUDP协议的协议的SocketSocket通信通信网络运行机制网络运行机制o Java用于网络操作的功能包是用于网络操作的功能包是,它包含多个访问各种标准网络协议的类包。它包含多个访问各种标准网络协议的类包。Java的网络访问类包分别支持以下三个层次的网络访问类包分别支持以下三个层次的网络运行机制。的网络运行机制。n 1)使用)使用URL访问网络资源访问网络资源o Java支持支持URL访问网络资源

2、的机制,通过访问网络资源的机制,通过URL标标识,可以直接使用识,可以直接使用http、file、ftp等多种协议,获等多种协议,获取远程计算机上的资源,方便快捷地开发取远程计算机上的资源,方便快捷地开发Internet应用程序。应用程序。n 2)Socketo Socket是建立在稳定连接基础上的以流传输数据的通信方式。它是目前实现客户服务器模式应用程序的主要手段。o Java提供了对应于Socket机制的一组类能按照用户约定的通信协议实现网络通信。这种方式适合开发特定功能的网络通信程序。网络运行机制网络运行机制n 3)Datagramo 在网络实际发展中,有时需要采用面向非连接的、以数据报

3、方式工作的通信方式,即在不建立连接的情况下进行数据的传输,这适用于网络不可靠环境下的数据传输和访问。这种方式称为Datagram。网络运行机制网络运行机制6o 客户机客户机/服务器(服务器(Client/Server)模式)模式,简称,简称C/S模式,模式,o 采用一种协同应用程序开发模型,是指由采用一种协同应用程序开发模型,是指由一个或多个客户机、一个或多个服务器以一个或多个客户机、一个或多个服务器以及操作系统和进程间的通信系统构成的一及操作系统和进程间的通信系统构成的一个复合系统。个复合系统。 o 基于这种模式的一个应用程序被分为两个基于这种模式的一个应用程序被分为两个部分,分别运行于网络

4、中不同的计算机上部分,分别运行于网络中不同的计算机上,由此充分利用网络共享资源、通过协议,由此充分利用网络共享资源、通过协议提高工作效率。提高工作效率。1.客户机与服务器客户机与服务器7o 基本组成:n 客户机:一个面向最终用户的接口设备或应用程序,它通过从另一个设备或应用程序(服务器)请求信息,然后将信息交给用户。客户机在整个任务中主要负责与用户对话,将用户的需求传达给服务器,等服务器安装此请示提供相应的服务后,将服务结果返回给用户。1.客户机与服务器客户机与服务器8n 服务器:服务器的硬件通常具有强大的信息处理能力,主要完成数据处理任务。服务器提供的典型功能有建立进程和网络服务地址,如监听

5、客户的请求处理客户请求、将响应结果交给用户、释放与客户机的连接。n 通信系统:客户机与服务器之间的通信不仅需要硬件连接,而更重要的是进行软件连接。软件连接是一种软件通信过程,如网络协议等;硬件连接主要用到网卡、网线等。1.客户机与服务器客户机与服务器9o C/S模式的特点:n 位置透明:服务器可以驻留在与客户机相同或不同的处理器上,需要时,客户机/服务器平台可通过重新定向服务来掩盖位置,服务器过程的物理位置对用户透明,反之也是这样。n 共享资源:一个服务器可以同时为多个客户服务,并能控制存取共享资源。1.客户机与服务器客户机与服务器10n 服务封装:客户过程只需知道服务器界面,不必了解其逻辑。

6、n 可扩展性:支持水平和垂直扩展,前者指可以增加或更改节点;后者指可以转移到新的服务器处理器上。1.客户机与服务器客户机与服务器11o Socket也叫套接字,用来建立网络连接的也叫套接字,用来建立网络连接的一种通信方式。一种通信方式。o 在在Java中,利用中,利用Socket(插座插座)类可以很类可以很方便地进行网络编程。方便地进行网络编程。o 不需要知道你的电脑或对方的电脑是通过什不需要知道你的电脑或对方的电脑是通过什么样的方式上网的,也不需要关心你们之间么样的方式上网的,也不需要关心你们之间的距离,只要告诉的距离,只要告诉Socket类你想和哪台电类你想和哪台电脑联系,其他的事脑联系,

7、其他的事Socket类自然会完成,类自然会完成,从这个角度看,从这个角度看,Socket类就像电源插座。类就像电源插座。2.基于基于TCP协议的协议的Socket的网络编的网络编程程12o 利用利用Socket类进行网络通讯时,首先要类进行网络通讯时,首先要确定服务器和客户端。确定服务器和客户端。o 网络通讯是在两台电脑之间完成的,为了网络通讯是在两台电脑之间完成的,为了顺利建立连接,一般都采取一台电脑等候顺利建立连接,一般都采取一台电脑等候连接,而另一台电脑主动连接的方式。连接,而另一台电脑主动连接的方式。o 等待连接的电脑就叫做服务器,而主动连等待连接的电脑就叫做服务器,而主动连接的电脑叫

8、做客户端。接的电脑叫做客户端。2.基于基于TCP协议的协议的Socket的网络编的网络编程程13o 客户端向服务器发送请求连接的信号,服客户端向服务器发送请求连接的信号,服务器接收到信号后,向客户端返回连接成务器接收到信号后,向客户端返回连接成功的信号,之后在二者之间就建立了一个功的信号,之后在二者之间就建立了一个连接通道,连接通道,o 通道是双向的,服务器和客户端都可以通通道是双向的,服务器和客户端都可以通过这条通道向对方发送消息,二者的地位过这条通道向对方发送消息,二者的地位是相等的。是相等的。2.基于基于TCP协议的协议的Socket的网络编的网络编程程14o 1、建立服务器端:n建立服

9、务器端对象,给出端口号,服务器端在这个端口等待客户端的连接n调用accept函数监听端口,程序会停止在这里,一直等待客户端的连接n当客户端连接到该端口之后,accept函数将建立一个Socket类,用于与客户端的通讯nServerSocket类会抛出IOException异常,必须用try . catch结构捕获该异常n建立服务器端的代码示例:try serverSocket = new ServerSocket(4444); Socket connSocket = serverSocket.accept(); catch (IOException e) System.out.println(

10、无法监听端口4444.); System.exit(-1);2.基于基于TCP协议的协议的Socket的网络编程的网络编程-步骤步骤115o2.建立客户端的步骤:n创建一个Socket对象,对象构造函数的两个参数分别为服务器端的主机名以及端口号n程序将不断连接远程计算机,直到连接成功之后,才继续执行下面的代码try clientSocket = new Socket(serverhost, 4444); catch (IOException e) System.out.println(无法与服务器建立连接。); System.exit(-1); n建立连接之后,服务器端和客户端即可对等地利用I

11、/O流发送或者接收信息2.基于基于TCP协议的协议的Socket的网络编程的网络编程-步骤步骤216o3、发送消息的步骤:n获得Socket类的输出流n建立一个PrintWriter对象,利用它向网络输出n利用println函数发送消息PrintWriter out = new PrintWriter( connSocket.getOutputStream(), true);out.println(发送消息);2.基于基于TCP协议的协议的Socket的网络编程的网络编程-步骤步骤317o 4.接收消息的步骤:n获得Socket对象的输入流n新建一个读数据流的对象,以读取输入流n将接收到的消息

12、保存在缓存中n调用缓存对象的readLine函数读入一行数据BufferedReader in = new BufferedReader( new InputStreamReader( connSocket.getInputStream();String inStr = in.readLine();nBufferedReader对象是一个标准的读入、缓存数据对象。此对象缺省的缓冲区很大,足以放下收到的所有数据n由于不知道通过网络会收到多少数据,因此先将接收到的数据暂存起来,然后再读取n执行readLine函数时,会一直等到接收完一行数据之后才会继续执行下去2.基于基于TCP协议的协议的Sock

13、et的网络编程的网络编程-步骤步骤418oTCP/IP协议下的Socket网络通信过程: 在服务器端创建一个指定端口号的ServerSocket对象 运行ServerSocket对象的accept()方法,在指定端口等待客户端请求,建立连接。 在客户端创建一个指定计算机地址和与服务器端具有相同端口号的Socket对象,由Socket对象向服务器端发出连接请求。 服务器端的ServerSocket对象接到请求信息后,创建一个Socket对象与客户端进行连接。 连接建立后,服务器端和客户端可分别建立输入输出数据流进行数据传输。 通信结束,关闭两端的Socket连接。 服务器端调用ServerSoc

14、ket对象的close()停止等待客户端请求。2.基于基于TCP协议的协议的Socket的网络编程的网络编程-步骤步骤419【例例8-2】【服务器端程序服务器端程序】public class SocketServer public static void main(String args) throws IOException ServerSocket ss=new ServerSocket(8888);Socket s=ss.accept();trySystem.out.println(“有客户端请求连接,客户端有客户端请求连接,客户端IP地地址:址:+s.getInetAddress().

15、getHostAddress()+,远程端口:,远程端口:+s.getPort()+,本地端口:,本地端口:+s.getLocalPort();BufferedReader in=new BufferedReader(new InputStreamReader( s.getInputStream();PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(s.getOutputStream(),true);20while(true)String str=in.readLine();if(str.equa

16、lsIgnoreCase(exit) break;/忽略大小写System.out.println(接受客户端数据:+str);out.println(服务器响应:+str);System.out.println(服务器退出);finallyss.close();21【客户端SocketClient】public class SocketClient public static void main(String args) throws IOException Socket s=new Socket(,8888);tryBufferedReader in=new Buffer

17、edReader(new InputStreamReader(s.getInputStream();PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(s.getOutputStream(),true);22while(true)/从键盘采集一行数据BufferedReader inkey=new BufferedReader(new InputStreamReader(System.in);System.out.print(从键盘输入数据:);String str=inkey.readLine()

18、;/读取一行out.println(str);if(str.equalsIgnoreCase(exit) break;String msg=in.readLine();System.out.println(从服务器收到数据:+msg);System.out.println(客户端退出);finallys.close();23o 1、先运行服务器端,显示空,然后运行客户端,此时,n 服务器端运行结果显示为:o有客户端请求连接,客户端IP地址:,远程端口:1376,本地端口:8888n 客户端运行结果显示为:o从键盘输入数据:运行结果运行结果24o 2.然后在客户端输入,“大连“

19、后回车,则n 服务器端运行结果显示为:o有客户端请求连接,客户端IP地址:,远程端口:1376,本地端口:8888o接受客户端数据:大连n 客户端运行结果显示为:o从键盘输入数据:大连o从服务器收到数据:服务器响应:大连o从键盘输入数据:运行结果运行结果25o 3.再在客户端输入,“exit“后回车,则n 服务器端运行结果显示为:o有客户端请求连接,客户端IP地址:,远程端口:1376,本地端口:8888o接受客户端数据:大连o服务器退出n 客户端运行结果显示为:o从键盘输入数据:大连o从服务器收到数据:服务器响应:大连o从键盘输入数据:exito客户端退出

20、运行结果运行结果26o 基于UDP协议的信息传递具有速度快和可靠性不高的特点。o 可靠性不高表现为,数据在传输时,用户无法知道数据能否到达目标主机,数据到达目标主机的顺序是否和发出的顺序一致,也不能确定对方收到数据是否会回应。o 虽然UDP协议下的信息传输可靠性不高,但传输的速度快,因而在不追求可靠性的情况下,很适合采用这种协议。 3.基于基于UDP协议的协议的Socket通信通信 27o UDP协议下的Socket通信过程:n 在发送端用DatagramPacket类创建一个对象,将指定数据打包发送到指定计算机的端口。n 接收端用DatagramPacket类创建一个具有数据包指定端口的对象

21、n 接收端创建一个数据包n 在接收端由DatagramPacket对象执行receive()方法可以用创建的数据包来接收从网络中传来的数据包。n 通信结束。3.基于基于UDP协议的协议的Socket通信通信 28【例例8-4】【服务器接收端程序服务器接收端程序UDPServer.java】import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import .DatagramPacket;import .DatagramSocket;import .SocketExcep

22、tion;public class UDPServer public static void main(String args) throws IOExceptiono 29try/创建DatagramSocket对象,用来接收数据DatagramSocket socks = new DatagramSocket(1400);/创建数据包,用于接收数据byte data = new byte8192;DatagramPacket receivePacket = new DatagramPacket(data, data.length);/调用socks对象的receive方法接收数据,并存放到

23、数据包中socks.receive(receivePacket); /显示客户端信息System.out.println(有客户端请求连接,客户端IP地址:+ receivePacket.getAddress().getHostAddress()+ ,远程端口:+receivePacket.getPort(); /解析数据包,提取receivePacket(从0到总长度所有数据)中的数 据转换为字符串String s=new String(receivePacket.getData(), 0, receivePacket.getLength(); System.out.println(接收客户端的数据为:+s);30catch(SocketException e)e.printStackTrace();31【例8-4】【客户发送端程序UDPClien

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论