第10章Java 网络编程 2.ppt_第1页
第10章Java 网络编程 2.ppt_第2页
第10章Java 网络编程 2.ppt_第3页
第10章Java 网络编程 2.ppt_第4页
第10章Java 网络编程 2.ppt_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

1、2020年8月9日4时6分,1,第十章Java网络编程,Java,2,Java语言提供了丰富的网络编程类库,因此它非常适合用于网络编程,强大快捷的网络编程功能正是Java备受欢迎的主要原因之一。 Java的网络功能由几个不同的包实现,基本的网络功能定义在包中。其中的接口和类可以大致分为三部分:URL、URLConnection和Socket。,1、引言,Java,3,10.1 URL 的使用,URL(Uniform/Universal Resource Locator )统一资源定位符号。 通过URL可以访问Internet上的各种网络资源。URL的基本结构由如下5部分组成: :/:/# 传输

2、协议(protocol):有HTTP、FTP、File等。默认为HTTP协议。 主机名(hostname):指定资源所在的主机名。主机名可以是IP地址,也可以是主机的名字或者域名。 端口号(port):端口号用来区分一个计算机中提供的不同服务,如Web服务、FTP服务等。每一种服务都用一个端口号,范围是065535。在URL中,hostname后面的冒号及端口号是可以省略的, HTTP的默认端口号是80。,Java,4,文件名(filename):文件名包括该文件的完整路径。在HTTP协议中,有一个默认的文件名是index.html,因此,与 引用(reference):是对资源内的某个引用,

3、如 URL类的构造方法 1、public URL(String spec):使用URL字符串构造一个URL对象URL u1=new URL();,Java,5,URL类的构造方法,2、public URL(String protocol,String host,String file):用指定的协议、主机名、文件路径及文件名创建一个URL对象; URL u2=new URL(http,/xyx/doc/manhua.html); 3、public URL(String protocol,String host,int port,String file):用指定的协议、主机名、端口号、文件路径及

4、文件名创建一个URL对象。第一个String类型的参数是协议的类型,可以是HTTP、FTP等。第二个String类型参数是主机上的某个文件(可以包括目录),int类型参数是指定端口号,最后一个参数给出文件名或路径名。 URL u3=new URL(http,80,/xyx/doc/manhua.html);,Java,6,URL类中的主要方法,Java,7,public static void main(String args) throws Exception URL u= new URL( InputStream in=u.openStream(); byte b=new bytein.a

5、vailable(); in.read(b); System.out.println(new String(b); in.close(); ,Java,8,10.2 Socket 网络编程,客户端可以通过构造一个Socket类对象来建立与服务器的连接。基于Socket的连接可以是流连接,也可以是数据报连接。Socket类的常用构造方法有如下3种: 1、Socket():创建一个套接字对象,该对象不请求任何连接。 2、Socket(String host, int port) 创建一个Socket对象,请求与host指定的服务器通过port端口建立连接 3、Socket(InetAddress,

6、int) 创建一个连接指定Internet地址、指定端口的流式Socket类对象,Java,9,端口号代表了特定的务,故必须保证此端口号没有被其他应用程序或服务占用。端口号的范围为 065535,但 01023 为系统保留的端口号,分配给了特定的应用协议,如 80 代表 HTTP 服务、21 代表 FTP 服务。编写网络程序时,应使用 1024 以上的端口。,Java,10,Socket类的主要方法,Java,11,9、ServerSocket类,ServerSocket类用在服务器端,用来监听所有来自指定端口的连接,并为每个新的连接创建一个Socket对象。之后客户端便可以与服务器端开始通信

7、了。,Java,12,ServerSocket 类,ServerSocket类的几个构造方法如下: 1、ServerSocket(int port): 在指定端口上创建一个ServerSocket类对象。 2、ServerSocket(int port, int backlog): 在指定端口上创建一个ServerSocket类对象,并进入监听状态,第二个int类型的参数backlog是服务器忙时保持连接请求的等待客户数量。 3、ServerSocket(int port, int backlog, InetAddress bindAddr) 使用指定的端口和和要绑定到的服务器 IP 地址创建

8、一个ServerSocket类对象,并进入监听状态。,Java,13,ServerSocket类的主要方法,Java,14,首先,在服务器端构造一个ServerSocket类,在指定端口上进行监听,这时服务器的线程处于等待状态。然后在用户端构造Socket类,与服务器上的指定端口进行连接。服务器监听到连接请求后,就可在两者之间建立连接。连接建立之后,还必须进行输入、输出流的连接才能开始进行通信。 通信的一般步骤如下: 1、服务器程序创建一个 ServerSocket 对象,然后调用 accept()方法等待客户端建立连接; 2、客户端程序创建一个 Socket 对象,并请求与服务器建立连接;

9、3、建立连接后,可以用 Socket 类的 getInputStream()和 getOutputStream()方法获得读写数据的输入/输出流; 4、通信结束后,双方调用 Socket 类的 close 方法断开连接。,10、实现Socket通信,Java,15,Server 端,Client 端,Accept(),inputStream,outputStream,Java,16,创建ServerSocket对象时,需要的只是一个端口号和IP地址。如果服务器就设定在本地,则不需要IP地址。调用accept()方法时,服务器端进阻塞状态,等待客户端的请求,直到有一个客户启动并请求连接到相应的服

10、务器端口。 在通信时,由Socket对象可以得到与之相关联的一个网络输入流和网络输出流。如果一个进程要通过网络向另一个进程发送数据,只需要写入与socket相关联的输出流。同样,如果一个进程要读取另一个进程发送过来的数据,则可以从与socket相关联的输入流中读取。,Java,17,import .* ; import java.io.* ; public class ServerTest public static void main(String args) throws Exception / 所有异常抛出 ServerSocket server = null ; / 定义ServerS

11、ocket类 Socket client = null ;/ 表示客 户端 PrintStream out = null ; / 打印流输出 server = new ServerSocket(2588) ;/ 服务器在2588端口上监听 System.out.println(服务器运行,等待客户端连接。) ; client = server.accept() ; / 得到连接,程序进入到阻塞状态,Java,18,String str = hello Java ; / 表示要输出的信息 out = new PrintStream(client.getOutputStream() ; out.p

12、rintln(str) ;/ 向客户端输出信息 client.close() ; server.close() ; ;,Java,19,客户端程序,import .* ; import java.io.* ; public class ClientTest public static void main(String args) throws Exception Socket client = null ;/ 表示客 户端 client = new Socket(localhost,2588) ; BufferedReader buf = null ;/ 一次性接收完成 buf = new B

13、ufferedReader(new InputStreamReader(client.getInputStream() ; String str = buf.readLine() ; System.out.println(服务器端输出内容: + str) ; buf.close() ; client.close() ; ;,Java,20,例:服务器和客户端进行回声通信,客户端从键盘输入的信息发送给服务器,服务器读取后,前面加上ECHO:又传送给客户端。 分析:客户端和服务器都有数据的读写,即都要用到Socket的InputStream和OutputStream。同时客户端要能进行键盘输入。

14、服务器端程序代码:ServerReadWrite.java 客户端代码:ClientReadWrite.java,Java,21,10.3 InetAddress 类,在Java中通过InetAddress类表示IP地址,用于实现主机名和IP地址之间的转换。InetAddress类描述了32位或64位的IP地址,并通过它的两个子类Inet4Address 和 Inet6Address来实现。 之前的IP地址,实际上使用四个十进制数字表示,相当于32位,把这样的IP地址称为IPV4。 但是随着网络上主机越来越多,发现IPV4地址不够使用,所以又进行了改进产生了IPV6(64位)。 注意InetA

15、ddress类的构造方法被私有化了,所以不能通过构造方法对其产生实例对象,只能通过其静态方法对其产生实例对象。找不到本地机器的地址时,这些方法通常会抛出UnknownHostException异常,所以应该在程序中进行异常处理。,Java,22,.InetAddress类的主要方法,Java,23,1)public static InetAddress getLocalHost() 该方法返回一个InetAddress对象,这个对象包含了本地机的IP地址。当查找不到本地机的地址时,将会抛出一个UnknownHostException异常。 2)public static InetAddress

16、 getByName (String host) 该方法返回一个由host指定的InetAddress对象,参数host可以是一个主机名,也可以是一个IP地址或者一个DNS域名。如果找不到指定的主机的IP地址,那么该方法将抛出一个UnknownHostException异常。 获得一个InetAddress对象后,就可以使用InetAddress类的getAddress()方法获得本机对象的IP地址(存放在字节数组中);使用getHostAddress()方法获得本机对象的IP地址;使用getHostName()方法获得主机名。,Java,24,3)public Sring getHostAd

17、dress() 该方法将IP地址以网络字节顺序的字节数组的形式返回。由于IPV4只有4个字节, IPV6有16个字节,如果需要知道数组的长度,可以用数组的length字段获得。 4)public Sring getHostName() getHostName()方法返回一个字符串形式的主机名字。如果被查询的机器没有主机名,或者如果使用了Applet,但是它的安全性却禁止查询主机名,则该方法就返回一个具有点分形式的数字IP地址。,Java,25,例 10.4 获取本地计算机的名称与 IP 地址。 /应用程序,文件名为 Example10_4.java import .*; public class Example11_4 public static void main(String aa) try InetAddress myip=InetAddress.getLocalHost(); System.out.println(计算机名 = + myip. getHostName ();System.out.println(IP 地址 =+myip. getHostAddress (); catch(Exception e) ,Java,26,教材程序运行结果如下:,Java,27,10.4项目拓展,下面给出的Java源代码分别是服务器端程序和客户端程序,两个程序之

温馨提示

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

评论

0/150

提交评论