Presentation is loading. Please wait.

Presentation is loading. Please wait.

本章提要 ◆ 客户/服务器模型 ◆ Java编写客户应用程序 ◆ Java编写服务器应用程序

Similar presentations


Presentation on theme: "本章提要 ◆ 客户/服务器模型 ◆ Java编写客户应用程序 ◆ Java编写服务器应用程序"— Presentation transcript:

1 本章提要 ◆ 客户/服务器模型 ◆ Java编写客户应用程序 ◆ Java编写服务器应用程序
第9章Socket编程 本章提要 ◆ 客户/服务器模型 ◆ Java编写客户应用程序 ◆ Java编写服务器应用程序

2 本章知识要点 客户/服务器模型 TCP/IP协议族 套接字(Socket) Java编写客户应用程序 Java编写服务器应用程序

3 9.1 客户/服务器模型

4 客户/服务器模型 客户/服务器模型的主要思想是要将应用程序的数据表示与数据处理和数据存储分开。 客户方主要是向服务器发出数据处理请求。
服务器方则是对数据处理请求进行接收,然后做出相应处理。

5 TCP/IP协议族 国际标准化组织(ISO)制订了开放系统互连(Open Systems Interconnection)参考模型
应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 OSI参考模型

6 Telnet、SMTP、HTTP、FTP…….
协议 协议就是约定,就是双方为了协调地做一件事情而共同遵循的规则。 Telnet、SMTP、HTTP、FTP……. 套接字(Socket) TCP/UDP IP/ICMP 数据链路层和物理层 TCP/IP协议族

7 套接字(Socket) 套接字包含主机地址与服务端口号。 在Internet中,主机地址就是客户程序或服务器程序所在的主机的IP地址。
端口与则是主机彼此通信时所有的通口 服务器 套接字 客户机 客户/服务器通信模式

8 著名端口所对应的应用 端口号 应用 21 FTP,传输文件 23 Telnet,远程登录 25 SMTP,邮件服务 67
BOOTP,提供引导时配置 80 HTTP,web服务 109 POP,远程访问邮件 著名端口所对应的应用

9 Socket 类 Socket是支持TCP协议的基本类。 Socket类提供了一些进行流输入/输出的方法。 ServerSocket类 ServerSocket是一个用于监听客户请求的Internet服务器程序的类。 作为服务器方程序必须使用ServerSocket类。 ServerSocket实际上并不执行数据通信工作,它仅仅接收客户请求,然后为客户创建一个相对应的Socket对象。

10 9.2 创建服务器应用程序

11 案例——用户注册模块之服务器端 提出问题 我们要开发用户注册模块中的服务器端应用,以实现远程用户通过Applet将信息保存到中心数据中。服务器程序需要用Java来开发,以下是服务器功能: (1)服务器应能够接收远程客户机上发来的用户资料。 (2)服务器应能够将用户资料保存在customer.dat文件中。          (3)服务器是多线程的,能够同时满足多个客户机的访问。 (4)服务器在端口2001上运行。

12 分析问题 确定创建服务器所要使用的类 创建服务器 确定监听机制 确定数据通信机制 设计模型图 监听 请求二 线程一 线程二 线程三 请求一
请求三 服务器程序 设计模型图

13 解决问题 1.创建服务器所要使用的类 2.创建服务器类 3.确定监听机制 4.确定数据通信机制 5.完成服务器程序 6.验证程序

14 创建服务器所要使用的类 ServerSocket类 通信过程 ServerSocket 请求 Socket 数据通信通道建立 客户 创建

15 ServerSocket类中提供的方法列表
目的 ServerSocket(int port) 在指定端口建立一个服务器套接字。有多个请求时,来不及处理的请求存入队列。本构造函数构造的套接字存放连接请求的了列长为50。如果队列已满,到达的请求将被拒绝。 ServerSocket(int port,int backlog) 在指定端口建立一个服务器套接字。backlog是存放连接请求的队列长。 ServerSocket(int port,int backlog,InetAddress bindAddr) 在指定端口建立一个服务器套接字。backlog是存放连接请求队列长。本构造函数适用于有多个IP地址的主机,bindAddr指定仅接受对某一地址的连接。 Socket accept() 使服务器套接字监听客户连接并接收它。并创建一新的套接字与客户建立连接。 InetAddress getInetAddress() 返回服务器套接字的本地主机地址。 int getLocalPort() 返回正在监听的端口。 void close() 关闭服务器套接字。 String toString() 返回服务器套接字的IP地址和端口号。 synchronized int getSoTimeout() 返回SO_TIMEOUT的值。该变量用于设定超时限制。当其值大于0时,accept()方法阻塞时仅阻塞设定的时间。如其值为0,阻塞将是无限期的。 synchronized void setSoTimeout(int timeout) throws SocketException 设定SO_TIMEOUT的值。 ServerSocket类中提供的方法列表

16 accept()方法 accept()方法是阻塞方式,当有连接请求过来时才执行返回。 它将创建一个新的套接字与客户套接字建立通信。 当有很多请求发往服务器时,服务器套接字(ServerSocket)将创建多个新的套接字与不同的客户进行通信。

17 创建服务器类 class MyServer extends Thread { public MyServer(){ try{
//创建ServerSocket对象,监听端口为2001 serverSocket = new ServerSocket(2001); } catch(IOException e){ System.out.println(“server is not start”+ e); System.out.println(“Server is listening …”); this.start();//引发监听线程

18 确定监听机制 服务器的run()方法主要是进行监听工作。 public void run() { try{ //无限循环
while(true) { //调用了阻塞方式的accept()方法 Socket client = serverSocket.accept(); //accept()接收到客户请求返回,创建DataCommutation对象 DataCommutation com = new DataCommutation(client); com.start(); } catch(IOException e){ System.out.println(“listening is error ”+e);

19 确定数据通信机制 DataCommutation线程类主要是在服务器套接字建立好连接之后,负责与客户端的一切通信工作。

20 // DataCommutation线程类代码 Class DataCommutation extends Thread
{ Customer customer = null; //定义对象输入流类 ObjectInputStream streamFromClient = null; Public DataCommutation(Socket inFromClient){ try{ //将套接字对象输入流创建为对象输入流 streamFromClient = new ObjectInputStream(inFromClient.getInputStream()); //从输入流读取对象 customer = (Customer)streamFromClient.readObject(); } //捕捉异常…… } //捕捉异常……

21 public void run(){ try{ //创建文件输出流对象,customer.dat是存放资料的文件
FileOutputStream fp = new FileOutputStream(“customer.dat”); //将文件输出流创建为对象输出流 ObjectOutputStream streamOutputFile = new ObjectOutputStream(fp); //输出customer对象到文件 streamOutputFile.writeObject(customer); //关闭流对象 streamOutputFile.close(); fp.close(); } //捕捉异常…… }// DataCommutation线程类结束

22 知识点 ObjectInputStream类 ObjectOutputStream类 InvalidClassException异常类
NotSerializableException异常类

23 单元练习 我们要开发航班资料录入模块中的服务器端应用,以实现公司工作人员将航班信息保存到中心数据中。服务器程序需要用Java来开发,以下是服务器功能: (1)服务器应能够接收前台客户机上发来的航班资料。 (2)服务器应能够将航班资料保存在flightInfor.dat文件中。 (3)服务器是多线程的,能够同时满足多个客户机的访问。 (4)服务器在端口2001上运行。

24 9.3 编写客户端应用程序

25 案例---用户注册模块之客户端 提出问题 用户注册界面已经生成,现在需要确定按钮触发处理程序。即当用户填写完注册资料后,点击确定,注册信息应该发送到远程服务器端应用程序,由服务器程序将注册信息保存。

26 分析问题 打包数据 将注册信息打包成一个类对象,即实现面向对象中的封装特性。 连接服务器程序 通过Socket向服务器发送连接请求 发送数据 连接一旦建立成功,马上发送注册信息给服务器。

27 解决问题 确定创建客户机所要使用的类 确定要提交的数据 何时向服务器提交数据

28 确定创建客户机所要使用的类 创建客户机的过程就是创建一Socket对象。 语法示例:
Socket clientSocket = new Socket(“ ”,1001);

29 Socket类包含的构造函数和基本方法 方法 描述 public Socket(InetAddress address,int port)
建立一个流套接字并把它连接到地址为address的主机的指定端口。port为端口号。 public InetAddress getInetAddress() 返回套接字所连接的远程主机地址。 public InputStream getInputStream() 返回该套接字的输入流。 public InetAddress getLocalAddress() 返回套接字连接的本地主机地址。 public int getLocalPort() 返回套接字所连接的本地主机端口。 public OutputStream getOutputStream() 返回该套接字的输出流。 public int getPort() 返回套接字所连接的远程主机端口。 Socket类包含的构造函数和基本方法

30 打包数据 客户资料是以对象的形式发送,所以数据必须被写入到Customer对象中,然后发送给服务器。
class Customer implements java.io.Serializable { String customID; String name; String sex; String age; String address; String phone; String e_mail; } //网络上传输的对象必须实现java.io.Serializable接口

31 确定向服务器提交数据的机制 当用户点击submit按钮时,连接服务器,向服务器发送数据。
public void actionPerformed(ActionEvent evt) { Object obj = evt.getSource(); if(obj == buttonSubmit){ //创建一Customer对象,将客户资料写入Customer对象 try{ //创建一客户套接字,连接服务器 Socket toServer = new Socket(" ",2001); //创建对象输出流,将数据写入套接字 ObjectOutputStream streamToServer = New ObjectOutputStream(toServer.getOutputStream()); streamToServer.writeObject(customer); //关闭对象输出流 streamToServer.close(); }

32 单元练习 我们要开发航班资料录入模块中的客户端应用,以实现公司工作人员将航班信息保存到中心数据中。航班资料录入界面已经生成,请加入事件处理代码。

33 小 结 java.net包的ServerSocket类用于创建一个套接字以让服务器监听客户的请求。
小 结 java.net包的ServerSocket类用于创建一个套接字以让服务器监听客户的请求。 ServerSocket类的accept()方法返回对客户的套接字的引用,它是Socket类的对象。 Socket类包含功能:提供对接收或发送数据给客户的客户流的引用。这由Socket类的getInputStream()和getOutputStream()方法实现。 可用ObjectInputStream类的readObject()方法读入来自串行化的对象。 可用ObjectOutputStream类的writeObject()方法写出对象类数据到流。 本章节主要介绍的是面向连接的TCP通信方式,这个也是大部分应用中涉及到的部分。大家如果想了解面向数据报的UDP通信方式,可以查阅DatagramPacket 类和DatagramSocket类。


Download ppt "本章提要 ◆ 客户/服务器模型 ◆ Java编写客户应用程序 ◆ Java编写服务器应用程序"

Similar presentations


Ads by Google