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

Slides:



Advertisements
Similar presentations
7.1 内置对象概述及分类 JSP 视频教学课程. JSP2.2 目录 1. 内置对象简介 1. 内置对象简介 2. 内置对象分类 2. 内置对象分类 3. 内置对象按功能区分 3. 内置对象按功能区分 4. 内置对象作用范围 4. 内置对象作用范围.
Advertisements

面向侧面的程序设计 方林博士 本文下载地址:
高级服务器设计和实现 1 —— 基础与进阶 余锋
阻塞操作. 在 linux 里,一个等待队列由一个 wait_queue_head_t 类型的结构来描述 等待队列的初始化: static wait_queue_head_t testqueue; init_waitqueue_head(&testqueue);
计算机网络课程总结 一、计算机网络基础 计算机网络定义和功能、基本组成 OSI/RM参考模型(各层的功能,相关概念, 模型中数据传输 等)
第二十章 圖型介面與網路對播 (GUI and Intercross Transition) 20-1 簡介 20-2 ActionListener Interface 20-3 ActionEvent Class 20-4 Vector Class 20-5 圖型介面與視窗關閉 20-6 圖型介面與資料顯示.
第十讲 网络通信 1、网络基本概念 2、Java与Internet 3、使用InetAddress 4、使用URL 5、Socket通信
第十五章 网络编程.
网络程序设计 第二章 客户端Socket用法详解.
第9章 网络通信 1.
目标 运用File类进行文件操作 理解流,标准输入/输出流的概念
实验4 基于Socket的C/S程序开发 实验目的
学习目标: 1)理解包和包过滤 2)理解包过滤的方法 3)设置特殊的包过滤规则
通訊協定 OSI分層模式 與 TCP/IP協定
Java语言程序设计 清华大学出版社 第9章 网络通信.
第14章 Java网络编程 Java语言提供了强大的网络编程功能,能够处理各种网络资源以及进行网络通信。java.net包定义了Java语言网络编程的主要工具类。其中,包括代表网络IP地址的InetAddress类;与URL有关的URL类和URLConnection类;与网络通信有关的Socket类和ServerSocket类。本章包括以下知识点。
網路服務 家庭和小型企業網路 – 第六章.
TCP/IP Protocol Suite TCP/IP協定 第二組 投影片製作by簡嘉宏 綦凱宏 林睿敏 滕孟哲.
C#程序设计 c# programming 网络编程 C#程序设计课程组.
第11章 Java网络编程 本章要点 11.1 网络基础 11.2 InetAddress编程 11.3 URL编程
第五章 Java高级编程 5.1 Java多线程机制 5.2 输入输出流类 5.3 网络编程.
西南科技大学网络教育系列课程 高级语程序设计(Java) 第十一章 Java 中的网络编程.
2018/12/3 面向对象与多线程综合实验-网络编程 教师:段鹏飞.
2018/12/3 面向对象与多线程综合实验-网络编程 教师:段鹏飞.
大学计算机基础 典型案例之一 构建FPT服务器.
管理信息结构SMI.
王豐緒 銘傳大學資訊工程學系 問題:JAVA 物件檔輸出入.
辅导课程六.
Java语言程序设计 第八部分 Applet小程序.
网络常用常用命令 课件制作人:谢希仁.
考试题型 填空题(30) 选择题(20) 名词解释(10) 问答题(24) 计算题(16) 附加题(30) 成绩核算:
实用组网技术 第一章 网络基础知识.
OSI七層架構 OSI階層 負責的工作 應用層 表達層 會議層 傳輸層 網路層 資料鏈結層 實體層 將應用程式所送出的訊息轉成字元資料
1、能够使用java进行数据库连接和SQL查询操作
Chapter 11:Java网络编程 授课教师:赵小敏 浙江工业大学 软件学院
《手把手教你学STM32》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司 淘宝店铺:
4、按钮事件.
C/C++/Java 哪些值不是头等程序对象
第十一章 Java的网络功能.
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
4.2通讯服务模块线程之间传递信息 信息工程系 向模军 Tel: QQ:
第 8 章 网络程序设计.
Java语言程序设计 清华大学出版社 第8章 输入输出流(1).
第7章 网络编程.
5.3 简单的tcp通讯 信息工程系 向模军 Tel: QQ:
Remote Access 主动设置方法 First let’s try the initiative activate.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C语言程序设计 主讲教师:陆幼利.
$9 泛型基础.
電子郵件簡介.
第四章 团队音乐会序幕: 团队协作平台的快速创建
DQMClientDim.cxx及双光子练习
1.4 计算机网络体系结构与协议 引言 网络系统的体系结构 网络系统结构参考模型ISO/OSI
分裂对象模型 C++ otcl.
实验七 安全FTP服务器实验 2019/4/28.
计算机网络与网页制作 Chapter 07:Dreamweaver CS5入门
Select模型 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
2019/5/3 JAVA Socket(UDP).
JSP实用教程 清华大学出版社 第2章 JSP运行环境和开发环境 教学目标 教学重点 教学过程 2019年5月7日.
第二章 Java语法基础.
数据报分片.
第二章 Java基本语法 讲师:复凡.
WSAAsyncSelect 模型 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang
_07多连接之select模型 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
阻塞式模型 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
助教:廖啟盛 JAVA Socket(UDP) 助教:廖啟盛
Internet课程设计 教师:陈 妍 朱海萍 西安交通大学计算机系
第十二章 Java网络编程 1.URL编程 2.Socket网络编程 3.Datagram网络编程.
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
Presentation transcript:

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

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

9.1 客户/服务器模型

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

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

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

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

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

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

9.2 创建服务器应用程序

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

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

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

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

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类中提供的方法列表

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

创建服务器类 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();//引发监听线程

确定监听机制 服务器的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);

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

// 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(); } //捕捉异常…… } //捕捉异常……

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线程类结束

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

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

9.3 编写客户端应用程序

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

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

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

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

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类包含的构造函数和基本方法

打包数据 客户资料是以对象的形式发送,所以数据必须被写入到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接口

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

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

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