西南科技大学网络教育系列课程 高级语程序设计(Java) 第十一章 Java 中的网络编程.

Slides:



Advertisements
Similar presentations
软件编程基础 一、程序的编辑 Java 源程序是以 Java 为后缀的简单的文本文件,可以用各种 Java 集成开发环境中的源代码编辑器来编写,也可以用其他文 本编辑工具,如 Windows 中的记事本或 DOS 中的 EDIT 软件等。 利用文字编辑器编写下列程序 public class Hello.
Advertisements

1 Java 语言程序设计 计算机系 鲍金玲. 2 引子 甲骨文 甲骨文是全球最大的信息管理软件及服务供应商,成立于 1977 年,公司总部 设在美国加利福尼亚州的红木城( Redwood Shores ),全球员工达 名, 包括 名开发人员、 7500 多名技术支持人员和.
大公教育行政职业能力测验讲义 邢长文老师. Page 2 大公教育全国客服热线:
3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
檔案處理.
计算机网络(第 6 版) 第 6 章 应用层 青岛理工大学通信与电子工程学院.
第 12 章 UDP 與 TCP.
Java程序设计教程 第一讲 Java概述.
1.6 中国人口迁移.
四資二甲 第三週作業 物件導向程式設計.
项目一 创建“夕照台”房产网站 ——网页制作基础
第十讲 网络通信 1、网络基本概念 2、Java与Internet 3、使用InetAddress 4、使用URL 5、Socket通信
第十五章 网络编程.
网络程序设计 第二章 客户端Socket用法详解.
第二章 JAVA语言基础.
Socket.
Ch07 介面與多重繼承 物件導向程式設計(II).
创意源自激情,技术成就梦想 畅翼创新俱乐部 2012年春俱乐部第三次技术培训 赵程.
实验4 基于Socket的C/S程序开发 实验目的
第三章 控制结构.
Lab312.
程式設計實作.
第 12 章 UDP 與 TCP.
第5章 异常处理 王德俊 上海交通大学继续教育学院.
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
第 13 章 DNS 著作權所有 © 旗標出版股份有限公司.
通訊協定 OSI分層模式 與 TCP/IP協定
Java语言程序设计 清华大学出版社 第9章 网络通信.
数据库操作示例 import java.sql.*; //导入java.sql包 public class JDBCDemo {
例外處理(Exception Handling)
Java 第28讲:建立删除文件 主讲教师:李焱 讲师.
Java基础 JavaSE异常.
P2P通信之 ——UDP穿越NAT方案的讨论
TCP/IP Protocol Suite TCP/IP協定 第二組 投影片製作by簡嘉宏 綦凱宏 林睿敏 滕孟哲.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
C#程序设计 c# programming 网络编程 C#程序设计课程组.
西南科技大学网络教育系列课程 高级语程序设计(Java) 第五章 继承、接口与范型.
第六章 网络基础.
程式設計實作.
第四章 基本輸出入 Java應用程式的輸出入介面有三種,分別是命令提示字元視窗、AWT元件、及Swing元件。本單元先介紹命令提示字元視窗,AWT請看第16、17章,Swing請看第20章。 輸入 輸出.
第六讲 JSP中的文件操作(2) 教学目的 本讲继续讲述JSP中使用Java输入、输出流实现文件的读写操作 。 1 文件上传 2 文件下载
2018/12/3 面向对象与多线程综合实验-网络编程 教师:段鹏飞.
Java语言程序设计 第五部分 Java异常处理.
9.1 程式偵錯 9.2 捕捉例外 9.3 自行拋出例外 9.4 自定例外類別 9.5 多執行緒
使用Windows2003 Server R2 伺服器架設暨網路原理.
3.1 数据类型 3.2 标识符与关键字 3.3 常量 3.4 变量 3.5 运算符与表达式 3.6 一个编程实例
Chapter 11:Java网络编程 授课教师:赵小敏 浙江工业大学 软件学院
异常及处理.
第 12 章 UDP 與 TCP 著作權所有 © 旗標出版股份有限公司.
4、按钮事件.
C/C++/Java 哪些值不是头等程序对象
第十一章 Java的网络功能.
* 單元:電腦與問題解決 主題:Java物件導向程式設計-類別與物件 台南縣國立善化高中 蕭嘉民 老師
Web Server 王宏瑾.
新网产品培训 MYDNS功能和使用.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
2019/5/3 JAVA Socket(UDP).
基础会计.
龍老師我不會Debug QQ.
中级会计实务 ——第一章 总论 主讲:孙文静
助教:廖啟盛 JAVA Socket(UDP) 助教:廖啟盛
JAVA 程式設計與資料結構 第三章 物件的設計.
判斷(選擇性敘述) if if else else if 條件運算子.
第1章 WWW和LAMP基本觀念.
第十二章 Java网络编程 1.URL编程 2.Socket网络编程 3.Datagram网络编程.
第二章 Java基础语法 北京传智播客教育
輸出執行結果到螢幕上 如果要將執行結果的文字和數值都「輸出」到電腦螢幕時,程式要怎麼寫? class 類別名稱 {
第二章 Java基本语法 讲师:复凡.
Summary
Presentation transcript:

西南科技大学网络教育系列课程 高级语程序设计(Java) 第十一章 Java 中的网络编程

概述 Java提供了比较完善的网络功能,定义在java.net包中。 通过流模式来实现网络信息交换,一个接口就同时拥有输入流和输出流。 网络功能采用客户机/服务器体系结构。 将网络功能按层次及使用方法分为三类: URL ; Socket ; DatagramSocket Application(HTTP,ftp,telnet…) Transport(TCP,UDP…) Network(IP…) Link(device driver…) Java网络通信分层模型 URL Socket

URL的相关概念 URL类 IP地址唯一标识了网络上的计算机,URL则标识了这些计算机上的资源。 URL类是对统一资源定位(Uniform Resource Locator)的抽象。

使用URL创建对象的应用程序称作客户端程序。 一个URL对象存放着一个具体的资源的引用,表明客户要访问这个URL中的资源 利用URL对象可以获取URL中的资源。 一个URL对象通常包含最基本的三部分信息: 协议:必须是URL对象所在的Java虚拟机支持的协议。 地址:必须是能连接的有效IP地址或域名。 资源:可以是主机上的任何一个文件。 http:// ftp:// file://

public URL(String spec) public URL(URL context,String spec) context:事先创建某个URL对象 spec通常是context上的某个文件或子目录 public URL(String protocol,String host,int port,String file) protocol:协议比如http、ftp、file file:该主机上的某个文件(可以包括目录) 构造方法会抛出MalformedURLException异常

例:构造方法使用字符串初始化一个URL对象 try { url = new URL("http://yahoo.com.cn"); } catch(MalformedURLException e) { System.out.println ("Bad URL:"+url);

读取URL中的资源 URL对象调用 该输入流指向URL对象所包含的资源。 通过该输入流可以将服务器上的资源信息读入到客户端。 public final InputStream openStream() throws IOException 方法可以返回一个输入流。 该输入流指向URL对象所包含的资源。 通过该输入流可以将服务器上的资源信息读入到客户端。 JTextField text = new JTextField(20); URL url = new URL(text.getText().trim()); InputStream in = url.openStream();

显示URL资源中的html文件 把html文件读入到JEditorPane,该html文件就会被解释执行,结果显示在JEditorPane中。 JEditorPane类的构造方法 public JEditorPane():构造JEditorPane对象。 public JEditorPane(URL initialPage) throws IOException:构造JEditorPane对象,使用参数initialPage指定对象最初显示的URL中的资源。 public JEditorPane(String url) throws IOException:构造JEditorPane对象,使用参数url指定该对象最初显示的URL中的资源。

public void setPage(URL page) throws IOException:显示新的URL中的资源。 用JEditorPane对象显示网页 JTextField text=new JTextField(20); JEditorPane editPane = new JEditorPane(); URL url = new URL(text.getText().trim()); editPane.setPage(url);

处理超链接 单击网页中超链接可以使得JEditorPane对象触发HyperlinkEvent事件, 通过处理HyperlinkEvent事件,来显示新的URL资源。 注册HyperlinkEvent的监听器 addHyperlinkListener(HyperlinkListener listener) 监听器需实现HyperlinkListener接口中的方法 void hyperlinkUpdate(HyperlinkEvent e)

InetAdress类 Java.net包中的InetAdress类对象含有一个Internet主机地址的域名和IP地址 域名:如,www.swust.edu.cn IP地址:如, 202.115.160.33 获取Internet上主机的地址 public static InetAddress getByname(String s) throws UnknownHostException 将一个域名或IP地址传递给该方法的参数s,获得一个InetAdress对象,该对象含有主机地址的域名和IP地址。

例:获取域名是www. swust. edu. cn的主机域名及IP地址,同时获取了IP地址是202. 115. 160 例:获取域名是www.swust.edu.cn的主机域名及IP地址,同时获取了IP地址是202.115.160.33的主机域名及IP地址。 public class DomainName { public static void main(String[] args) { try{ InetAddress address_1 = InetAddress.getByName ("www.swust.edu.cn "); System.out.println(address_1.toString()); InetAddress address_2 = InetAddress.getByName (“202.115.160.33"); System.out.println(address_2.toString()); } catch(UnknownHostException e){ System.out.println(“无法找到 www.swust.edu.cn"); }

InetAddress类中含有两个实例方法: public String getHostName()获取InetAddress对象所含的域名。 public String getHostAddress() 获取InetAddress对象所含的IP地址。 获取本地机的地址 使用InetAddress类的静态方法: getLocalHost() 获得一个InetAddress对象,该对象含有本地机的域名和IP地址。

套接字Socket Socket概述 套接字(Socket)是实现客户机和服务器间通信的一种机制。 套接字连接:客户端的套接字对象和服务器端的套接字对象通过输入、输出流连接在一起。 Java中的套接字来源于伯克利(Berkeley)的BSD引入的套节字范型 套接字(Socket)可用于网络通信传输的三个协议:IP、TCP、UDP Server P o r t port client connection

套接字端口号被规定为一个16位的整数0~65535。 保留套接字:TCP/IP为特定协议保留了低端的1024个端口,比如,FTP:21;Telnet:23;e-mail:25;HTTP:80。 TCP/IP套接字用于在主机和Internet之间建立可靠的、双向的、持续的、点对点的流式连接,分为两类: 服务器端套接字:ServerSocket类 客户端套接字:Socket类

客户端使用Socket类建立一个到服务器的套接字对象。 Socket类的构造方法 Socket(String host,int port):创建一个套接字对象,请求和host指定的服务器通过port端口建立连接。 Socket(String host,int port,InetAddress localAddr,int localport):以本地机localAddr的localport端口创建一个套接字对象,并请求和host指定的服务器通过port端口建立连接。

构造方法可能发生IOException异常。 try{ Socket mysocket = new Socket (“192.168.1.3”, 1088); } catch(IOException e){ … } 客户端建立有参数的Socket对象的过程就是向服务器发出套接字连接请求。 如果服务器端相应的端口上有ServerSocket对象正在使用accept方法等待客户,那么双方的套接字对象就连接在一起。

为空套接字建立连接 public void connect(SocketAddress endpoint) throws IOException 为了使用connect方法, 使用InetSocketAddress创建一个连接对象。 InetSocketAddress的构造方法 public InetSocketAddress(InetAddress addr, int port)

服务器端套接字(ServerSocket) 客户端使用ServerSocket类建立一个等待请求的服务器套接字对象。 ServerSocket(int port):创建一个端口号为port的服务器套接字对象。 ServerSocket(int port,int backlog):创建一个端口号为port的服务器套接字对象,并设定最大连接数为backlog。 构造方法可能发生IOException异常。 try{ ServerSocket myserver = new ServerSocket (“192.168.1.1”, 1088); } catch(IOException e){ … }

public Socket accept() throws IOException 接受客户的套接字连接请求 public Socket accept() throws IOException try{ Socket socketAtServer= waitSocketConnection.accept(); }catch(IOException e){ …… } 套接字的流连接 客户端和服务器端的套接字对象进行连接以后,还必须进行输入、输出流的连接才能进行通信。

套接字连接示意图 输入流 输出流 客户端套接字 (Socket) 服务器端套接字 (Socket) 连接 getInputStream() getOutputStream() getInputStream() 套接字连接示意图

getInputStream和getOutputStream的声明 public InputStream getInputStream() throws IOException public OutputStream getOutputStream() hrows IOException 方法使用时注意捕捉异常。

利用Socket方式进行通信的一般步骤 创建服务器ServerSocket,设置建立连接的Port。 创建客户机Socket ,设置绑定的主机名称或IP地址,指定连接端口号。 客户机Socket发起连接请求 建立连接(accept)。 取得InputStream和OutputStream 利用InputStream和OutputStream进行数据通信。

使用多线程处理套接字连接 把数据读写放在一个单独线程的run()方法中去进行。 服务器端接受一个客户套接字的请求后,就应该启动一个专门为该客户服务的线程。 尽量不要在主线程中进行套接字通信。

UDP数据报 基于UDP的信息传递更快,但不提供可靠性保证。 基于UDP通信的基本模式 将数据打包,称为数据包,然后将数据包发往目的地。 接受别人发来的数据包,然后查看数据包中的内容。

使用DatagramPacket类的对象将数据打包 发送数据 使用DatagramPacket类的对象将数据打包 DatagramPacket(byte data[ ],int length, InetAddtress address,int port) DatagramPack(byte data[ ],int offset,int length,InetAddtress address,int port) byte[ ] data=”这是一个测试”.getByte(); InetAddress address = InetAddress.getByName(“www.swust.edu.cn”); DatagramPacket data_pack=new DatagramPacket(data,data.length,address,980)

使用DatagramSocket类创建发送数据的对象 DatagramSocket() 使用send方法发送数据 byte[ ] data=”这是一个测试”.getByte(); InetAddress address = InetAddress.getByName(“www.swust.edu.cn”); DatagramPacket data_pack = new DatagramPacket(data,data.length,address,980) DatagramSocket sender = new DatagramSocket(); sender.send(data_pack);

使用DatagramPacket类创建接收数据的包 DatagramPack(byte[ ] data,int length) byte data[ ]=new byte[100]; int length=90; DatagramPacket pack = new DatagramPacket(data,length); 使用DatagramSocket类创建接收数据的对象 DatagramSocket(int port) 使用receive方法接收数据

byte data[ ]=new byte[100]; int length=90; DatagramPacket pack = new DatagramPacket(data,length); DatagramSocket receiver = new DatagramSocket(980); receiver.receive(pack); 与发送包时定义的端口号一致

使用无参数的构造方法创建DatagramSocket类的对象,调用send()方法发送数据。 利用UDP方式进行通信的一般步骤 创建DatagramPacket类的对象将数据打包。 使用无参数的构造方法创建DatagramSocket类的对象,调用send()方法发送数据。 创建DatagramPacket类的对象接收数据包。 创建DatagramSocket类的对象,调用receive()方法接收数据。

广播数据包 Internet的地址是a.b.c.d的形式。该地址的一部分代表用户自己主机,而另一部分代表用户所在的网络。 当a小于128,那么b.c.d就用来表示主机,这类地址称做A类地址。 如果a大于等于128并且小于192,则a.b表示网络地址,而c.d表示主机地址,这类地址称做B类地址。 如果a大于等于192,则网络地址是a.b.c,d表示主机地址,这类地址称做C类地址。 224.0.0.0与239.255.255.255之间的地址称做D类地址。

D类地址并不代表某个特定主机的位置,称做一个组播地址,加入到同一个组播地址的主机可以在某个端口上广播信息,也可以在某个端口号上接收信息。 设置组播地址 使用InetAddress类创建组播组地址 例如:InetAddress group = InetAddress.getByName("239.255.8.0");

使用MulticastSocket类创建一个多点广播套接字对象。 创建多点广播套接字 使用MulticastSocket类创建一个多点广播套接字对象。 public MulticastSocket(int port) throws IOException 设置广播的范围 MulticastSocket类的对象调用 public void setTimeToLive(int ttl) throws IOException ttl的取值范围:0~255 本地网络取值为0

加入组播组 MulticastSocket类的对象调用 public void joinGroup(InetAddress mcastaddr) throws IOException 退出组播组 MulticastSocket类的对象调用 public void leaveGroup(InetAddress mcastaddr) throws IOException

广播数据 MulticastSocket类的对象调用 public void send(DatagramPacket p) throws IOException 接收数据 MulticastSocket类的对象调用 public void receive(DatagramPacket p) throws IOException

使用InetAddress类创建组播组地址。 使用MulticastSocket类的对象创建一个多点广播套接字。 利用广播方式进行通信的一般步骤 使用InetAddress类创建组播组地址。 使用MulticastSocket类的对象创建一个多点广播套接字。 MulticastSocket类的对象调用 setTimeToLive方法设置广播的范围。 MulticastSocket类的对象调用joinGroup方法加入组播组。 MulticastSocket类的对象调用send方法进行广播。 MulticastSocket类的对象调用receive方法接收广播信息。