《第9章Java网络.ppt》由会员分享,可在线阅读,更多相关《第9章Java网络.ppt(57页珍藏版)》请在优知文库上搜索。
1、1第第9章章 网络通信网络通信2主要内容主要内容9.1网络编程的基础知识9.2 基于TCP协议网络程序设计9.3 基于UDP协议网络程序设计9.4 JApplet编程9.5基于分布模式的云计算系统39.1网络编程的基础知识网络编程的基础知识9.1.1IP地址和端口号地址和端口号9.1.2套接字套接字49.1.1IP地址和端口号地址和端口号1、IP地址地址 网络中的每台计算机都必须有一个惟一的IP地址作为标识,这个数通常写作一组由“.”号分隔的十进制数。59.1.1IP地址和端口号地址和端口号在J包中,IP地址由一个称作InetAddress的特殊的类来描述。这个类提供了三个用来获得一个Inet
2、Address类的实例的静态方法。这三个方法是:getLocalHost()返回一个本地主机的IP地址。getByName(String host)返回对应于指定主机的IP地址。getAllByName(String host)对于某个主机有多个IP地址(多宿主机)可用于得到一个IP地址数组。此外,对一个InetAddress的实例可以使用:getAddress()获得一个用字节数组形式表示的IP地址。getHostName()作反向查询,获得对应于某个IP地址的主机名。6【例【例9-1】通过域名查找】通过域名查找IP地址。地址。核心语句:try InetAddress zsm_address
3、;zsm_address=InetAddress.getByName();str=思维论坛的IP地址为:+zsm_address.toString();catch(UnknownHostException e)str=无法找到思维论坛;7【例【例9-2】查找本机】查找本机IP地址。地址。核心语句:try InetAddress host_address;host_address=InetAddress.getLocalHost();str=本机的IP地址为:+host_address.toString();catch(UnknownHostException e)str=本机没有安装网卡,无法
4、找到IP。;89.1.1IP地址和端口号地址和端口号2、端口 我们用“端口号”来标识正在计算机上运行的进程(程序)。每个被发送的网络数据包也都包含有“端口号”,用于将该数据帧交给具有相同端口号的应用程序来处理。99.1.1IP地址和端口号地址和端口号2、端口 端口号是一个整数,其取值范围为065535之间。由于同一台计算机上不能同时运行两个有相同端口号的进程。通常01023间的端口号作为保留端口号,用于一些网络系统服务和应用,用户的普通网络应用程序应该使用1024以后的端口号,从而避免端口号冲突。109.1.1IP地址和端口号地址和端口号3、TCP与UDP协议 在网络中,有两个常用的协议,它们
5、是“传输控制协议”(Transmission Control Protocol,简称TCP)和“用户数据报协议”(User Datagram Protocol,简称:UDP)。TCP是面向连接的通信协议,TCP提供两台计算机之间的可靠无差错的数据传输。UDP是无连接通信协议,UDP不保证可靠数据的传输。119.1.2套接字套接字1、什么是套接字 在TCP/IP通信协议中,套接字(Socket)就是IP地址与端口号的组合。如图所示,IP地址193.14.26.7与端口号13组成一个套接字。129.1.2套接字套接字1、什么是套接字网络通信,准确地说,不能仅说成是两台计算机之间在通信,而是两台计算
6、机上执行的网络应用程序(进程)之间在收发数据。当两个网络程序需要通信时,它们可以通过使用Socket类建立套接字连接。我们把呼叫方称为“客户端”,负责监听的一方称为“服务器端”。139.1.2套接字套接字2、客户端建立套接字Socket对象在客户端使用socket类,建立向指定服务器IP和端口号连接的套接字,其构造方法是:Socket(host_IP,prot);其中host_IP是服务器的IP地址,prot是一个端口号。Socket主要方法有:getInputStream():获得一个输入流,读取从网络线路上传送来的数据信息。getOutputStream():获得一个输出流,用这个输出流将
7、数据信息写入到网络“线路”上。149.1.2套接字套接字3、服务器端建立套接字Socket对象 在服务器端用ServerSocket类创建服务器Socket,ServerSocket类的构造方法为:ServerSocket(int port);创建ServerSocket实例是不需要指定IP地址的,ServerSocket总是处于监听本机端口的状态。ServerSocket类的主要方法:Socket accept();该方法用于在服务器端的指定端口监听客户机发起的连接请求,并与之连接,其返回值为Socket对象。159.2 基于基于TCP协议网络程序设计协议网络程序设计9.2.1客户机/服务器
8、模式9.2.2同时服务于多个客户的解决方案169.2.1客户机客户机/服务器模式服务器模式 利用利用Socket方式进行数据通信与传输,大致有如下步骤:方式进行数据通信与传输,大致有如下步骤:(1)创建服务器端ServerSocket,设置建立连接的端口号。(2)创建客户端Socket对象,设置绑定的主机名称或IP地址,指定连接端口号。(3)客户机Socket发起连接请求。(4)建立连接。(5)取得InputStream和OutputStream。(6)利用InputStream和OutputStream进行数据传输。(7)关闭Socket和ServerSocket。1718【例【例9-3】远
9、程数据通信示例,本例由客户端程】远程数据通信示例,本例由客户端程序和服务器程序两部分组成。序和服务器程序两部分组成。(1)客户端程序(2)服务器端程序199.2.2同时服务于多个客户的解决方案同时服务于多个客户的解决方案1、启动多个服务程序、启动多个服务程序 我们可以在服务器端启动多个服务程序,等待客户机的连接请求,每个服务程序处理一个客户机数据,它们只是监听的端口号不同。显然,这个方案耗用资源太多。209.2.2同时服务于多个客户的解决方案同时服务于多个客户的解决方案2、应用多线程、应用多线程 在服务程序中应用多线程技术,不同的线程为不同的客户服务。主线程负责等待客户机的连接请求,各个线程负
10、责网络连接,接收客户发送来的信息。21【例9-4】服务程序应用多线程技术同时处理多个客户机的连接请求。(1)客户端程序(2)服务器端程序 229.3 基于基于UDP协议网络程序设计协议网络程序设计9.3.1基于UDP协议的数据报套接字9.3.2数据报的程序设计过程9.3.3广播数据报套接字239.3.1基于基于UDP协议的数据报套接字协议的数据报套接字 TCP协议通过socket套接字建立一条虚电路。TCP协议的socketserverclientDatagram数据报数据报serverclientUDP数据报的每个数据包要包含目的地址和端口号.24在UDP中,要使用二个类:(1)Datagr
11、amSocket 类发送时,用 send()方法发送数据;接收时,用 receive()方法接收数据。(2)DatagramPacket 类 用于打包或拆包 发送时打包:包由数据、接收地址、端口号组成;接收时拆包:取出包中的数据、接收地址、端口号。259.3.2数据报的程序设计过程数据报的程序设计过程1、服务器端发出报文的步骤、服务器端发出报文的步骤(1)定义数据成员。DatagramSocket socket;DatagramPacket packet;InetAddress address;(用来存放接收方的地址)int port;(用来存放接收方的端口号)(2)创建数据报文Socket对
12、象。try socket=new DatagramSocket(1111);catch(.SocketException e)socket 绑定到一个本地的可用端口,等待接收客户的请求。269.3.2数据报的程序设计过程数据报的程序设计过程1、服务器端发出报文的步骤、服务器端发出报文的步骤(3)分配并填写数据缓冲区(一个字节类型的数组)。byte Buf=new byte256;存放从客户端接收的请求信息.(4)创建一个DatagramPacket。packet=new DatagramPacket(Buf数组,256字节长度);用来从socket接收数据,它只有两个参数。(5)服务器阻塞。s
13、ocket.receive(packet);在客户的请求报道来之前一直等待。279.3.2数据报的程序设计过程数据报的程序设计过程1、服务器端发出报文的步骤、服务器端发出报文的步骤(6)从到来的包中得到地址和端口号。InetAddress address=packet.getAddress();int port=packet.getPort();(7)将数据送入缓冲区。来自文件,或键盘输入。(8)建立报文包,用来从socket上发送信息。Packet=new DatagramPacket(buf,buf.length,address,port);(9)发送数据包。socket.send(pac
14、ket);(10)关闭socket。socket.close();289.3.2数据报的程序设计过程数据报的程序设计过程2、客户端接收包的步骤、客户端接收包的步骤 (1)定义数据成员。int port;InetAddress address;DatagramSocket socket;DatagramPacket packet;byte sendBuf=new byte256;(2)建立socket。socket=new DatagramSocket();(3)向服务器发出请求报文。address=InetAddress.getByName(args0);port=parseInt(args1
15、);packet=new DatagramPacket(sendBuf,256,address,port);socket.send(packet);299.3.2数据报的程序设计过程数据报的程序设计过程2、客户端接收包的步骤、客户端接收包的步骤 (4)客户机等待应答。packet=new DatagramPacket(sendBuf,256);socket.receive(packet);(如果没有到就一直等待,因此程序要设置时间限度)(5)处理接收到的数据。String received=new String(packet.getData(),0,packet.getLength();Sys
16、tem.out.println(received);30数据报工作过程建立数据报建立数据报socket();建立一个报文包建立一个报文包packet等待请求报文等待请求报文建立数据报建立数据报socket建立一个请求包建立一个请求包发出请求发出请求获得对方地址获得对方地址构成信息包构成信息包发送出去发送出去创建接收包创建接收包等待接收等待接收31【例【例9-59-5】一个简单的数据报示例。】一个简单的数据报示例。(1)主机1(数据发送方):(2)主机2(数据接收方):329.3.3广播数据报套接字广播数据报套接字 我们把网络上的IP地址划分为A、B、C、D四类,它们是:A类地址为:0.0.0.0127.255.255.255B类地址为:128.0.0.0191.255.255.255C类地址为:192.0.0.0223.255.255.255D类地址为:224.0.0.0239.255.255.255广播数据报套接字就是利用网络系统保留的D类地址进行发送和接收数据。一个D类地址称为一个广播组,把要广播或接收广播的主机都加入到同一个广播组中,即设置为相同的D类IP地址。339.3.3广播