网络编程基础教程.ppt

上传人:sccc 文档编号:5450704 上传时间:2023-07-08 格式:PPT 页数:38 大小:373.01KB
返回 下载 相关 举报
网络编程基础教程.ppt_第1页
第1页 / 共38页
网络编程基础教程.ppt_第2页
第2页 / 共38页
网络编程基础教程.ppt_第3页
第3页 / 共38页
网络编程基础教程.ppt_第4页
第4页 / 共38页
网络编程基础教程.ppt_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《网络编程基础教程.ppt》由会员分享,可在线阅读,更多相关《网络编程基础教程.ppt(38页珍藏版)》请在三一办公上搜索。

1、第7章 网络编程,Java号称Internet上的语言,它从语言级上提供了对网络应用程序的支持,程序员能够很容易的开发常见的网络应用程序。Java提供的网络类库,可以实现无痛苦的网络连接,连网的底层细节被隐藏在Java的本机安装系统里,由JVM进行控制。并且Java实现了一个跨平台的网络库,程序员面对的是一个统一的网络编程环境。,7.1.1 网络基础,网络编程的目的就是指直接或间接地通过网络协议与其它计算机进行通讯。网络编程中有两个主要的问题,一个是如何准确地定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效地进行数据传输。要想让处于网络中的主机互相通信,只是知道通信双方地址还是不够的

2、,还必须遵循一定的规则。有两套参考模型:OSI参考模型,TCP/IP参考模型(或TCP/IP协议)。由于OSI参考模型过于理想化,未能在因特网上进行广泛推广。这样,TCP/IP协议就成为事实上的国际标准。,7.1.2 TCP/IP协议簇,TCP/IP以其两个主要协议:传输控制协议(TCP)和网络互联协议(IP)而得名,实际上是一组协议,包括多个具有不同功能且互为关联的协议。TCP/IP协议模型从更实用的角度出发,形成了高效的四层体系结构,即网络接口层、IP层、传输层和应用层。下图表示了TCP/IP的分层结构和与OSI参考模型的对应关系。,7.1.3 TCP和UDP,这里只重点介绍TCP/IP协

3、议的运输层协议。运输层协议中有两个非常重要的协议:传输控制协议TCP(Transmission Control Protocol),用户数据报协议UDP(User Datagram Protocol)。传输控制协议TCP是面向连接的运输层协议。即应用进程(或程序)在使用TCP协议之前,必须先建立TCP连接,在传输完毕后,释放已经建立的连接。利用TCP协议进行通信的两个应用进程,一个是服务器进程。另一个是客户进程。用户数据报协议UDP是面向无连接的运输层协议。即应用进程(或程序)在使用UDP协议之前,不必先建立连接。自然,发送数据结束时也没有连接需要释放。因此,减少了开销和发送数据之前的时延。,

4、7.2 InetAdress类,Internet上的主机有两种方式表示地址:(1)域名 例如,(2)IP 地址 例如,202.108.35.210 包中的InetAddress类对象含有一个Internet主机地址的域名和IP地址:域名容易记忆,当你在连接网络时输入一个主机的域名后,域名服务器(DNS)负责将域名转化成IP地址,这样我们才能和主机建立连接。,7.2 InetAdress类,1获取Internet上主机的地址 我们可以使用InetAddress类的静态方法:getByName(String s);将一个域名或IP地址传递给该方法的参数s,获得一个 InetAddress对象,该对

5、象含有主机地址的域名和IP地 址,该对象用如下格式表示它包含的信息:下面的例子:InetAddressTest.java.分别获取域名是的主机域名及IP地址。,public class InetAddressTest public static void main(String args)try InetAddress address_1=InetAddress.getByName(“”);/InetAddress类需处 理异常 System.out.println(address_1.toString();System.out.println(address_1.getHostName();

6、/取InetAddress对象所含的域名。System.out.println(address_1.getHostAddress();/获取InetAddress对象所含的IP地址。InetAddress address_2=InetAddress.getLocalHost();/对象含有本地机的域名和IP地址。System.out.println(address_2.toString();catch(UnknownHostException e)System.out.println();,使用InetAddress,调用上述方法获取InetAddress对象时,如果指定的主机名或IP地址不能

7、被解析,将抛出UnknownHostException异常。例:try InetAddress address=InetAddress.getByName();catch(UnknownHostException ex)System.out.println(Could not find);为了创建InetAddress对象,Java需要执行主机名和IP地址之间的相互解析工作,这对系统来说可能是一个耗时的开销,为了避免一些重复的解析工作,Java虚拟机内部采取了缓存机制。,7.2 InetAdress类,另外,InetAddress类中含有两个实例方法:public String getHost

8、Name()取InetAddress对象所含的域名。public String getHostAddress()获取InetAddress对象所含的IP地址。2获取本地机的地址 我们可以使用InetAddress类的静态方法:getLocalHost();获得一个InetAddress对象,该对象含有本地机的域名和IP地址。例如:InetAddress address_2=InetAddress.getLocalHost();System.out.println(address_2.toString();,7.3 TCP程序设计,客户端服务器模型是最常见的网络应用程序模型。当我们上网冲浪时,我

9、们所使用的浏览器(例如IE)就是一个客户端软件,而提供网页的站点必需运行一个WEB服务器。一般而言,主动发起通信的应用程序属于客户端。而服务器则是等待通信请求,当服务器收到客户端的请求,执行需要的运算然后向客户端返回结果。,套接字Socket,IP地址标识Internet上的计算机,端口号标识正在计算机上运行的进程(程序)。端口号与IP地址的组合得出一个网络套接字。端口号被规定为一个16位的整数065535。其中,01023被预先定义的服务通信占用(如telnet占用端口23,http占用端口80等)。除非我们需要访问这些特定服务,否则,就应该使用102465535这些端口中的某一个进行通信,

10、以免发生端口冲突。,7.3 TCP程序设计,利用套接字(socket)接口开发网络应用程序早已被广泛的采用,以至于成为事实上的标准。套接字能执行7种基本操作:连接到远程机器。绑定到端口。接收从远程机器来的连接请求。监听到达的数据。发送数据。接收数据。关闭连接。,7.3 TCP网络编程,两个Java应用程序可通过一个双向的网络通信连接实现数据交换,这个双向链路的一段称为一个Socket(套接字)。Socket通常用来实现Client/Server连接。Java语言的基于套接字编程分为服务器编程和客户端编程,其通信模型如图7.3.1所示。,图7.3.1基于TCP的Socket通信,7.3 基于So

11、cket的C/S程序,客户端Socket的工作过程包含以下四个基本的步骤:(1)创建Socket。根据指定的IP地址或端口号构造Socket类对象。如服务器端响应,则建立客户端到服务器的通信线路。(2)打开连接到Socket的输入/出流。使用getInputStream()方法获得输入流,使用getOutputStream()方法获得输出流。(3)按照一定的协议对Socket进行读/写操作。通过输入流读取服务器放入线路的信息(但不能读取自己放入线路的信息),通过输出流将信息写入线程。(4)关闭Socket。断开客户端到服务器的连接,释放线路,对于服务器和客户机而言,将上述第一步改为构造Serv

12、erSocket类对象,监听客户端的请求并进行响应。(1)调用ServerSocket(int port)创建一个服务器端套接字,并绑定到指定端口上。(2)调用accept(),监听连接请求,如果客户端请求连接,则接受连接,返回通信套接字。(3)调用Socket类的getOutputStream和getInputStream获取输出流和输入流,开始网络数据的发送和接收。(4)最后关闭通信套接字。,服务器程序的工作过程包含以下四个基本的步骤:,图7.1 基于Socket的C/S通信,7.3 TCP网络编程,(1)服务器建立ServerSocket对象 ServerSocket对象负责等待客户端请

13、求建立套接字连接,类似邮局某个窗口中的业务员。也就是说,服务器必须事先建立一个等待客户请求建立套接字连接的ServerSocket对象。,当建立服务器套接字时可能发生IOException异常,因此要象下面那样建立接收客户的服务器套接字。try ServerSocket ss=new ServerSocket(1880);Socket socketAtServer=ss.accept();catch(IOException e)注意:接收客户的套接字也可能发生IOException异常。所谓“接收”客户的套接字请求,就是accept()方法会返回一个Socket对象:socketAtServe

14、r,称作服务器端的套接字对象。,7.3 TCP网络编程,ServerSocket类的构造方法如下:ServerSocket(int port)throws IOException:功能:创建绑定到特定端口的服务器套接字。ServerSocket(int port,int backlog)throws IOException功能:利用指定的 backlog 创建服务器套接字并将其绑定到指定的本地端口号。backlog表示队列的最大长度。ServerSocket(int port,int backlog,InetAddress bindAddr)throws IOException功能:使用指定的

15、端口、侦听backlog和要绑定到的本地 IP 地址创建服务器,bindAddr表示要将服务器绑定到的InetAddress。,(2)客户端创建Socke对象。客户端程序可以使用Socket类创建对象,创建的同时会自动向服务器方发起连接。Socket的构造方法是:Socket(String host,int port)throws UnknownHostException,IOException功能:向服务器(域名是host。端口号为port)发起TCP连接,若成功,则创建Socket对象,否则抛出异常。Socket(InetAddress address,int port)throws IO

16、Exception功能:同上。只是根据InetAddress对象所表示的IP地址以及端口号port发起连接。,创建Socket对象可能发生IOException异常,因此要象下面那样建立到服务器的套接字连接。try Socket socketAtClient=new Socket(“http:/192.168.0.78”,1880);catch(IOException e)客户端建立socketAtClient对象的过程就是向服务器发出套接字连接请求,如果服务器端相应的端口上有ServerSocket对象正在使用accept方法等待客户,那么双方的套接字对象socketAtClient和soc

17、ketAtServer就都诞生了。,(3)流连接 客户端和服务器端的套接字对象诞生以后,还必须进行输入、输出流的连接。服务器端的这个Socket对象socketAtServer使用方法getOutputStream()获得的输出流将指向客户端Socket对象socketAtClient 使用方法getInputStream()获得的那个输入流;同样,服务器端的这个Socket对象socketAtServer使用方法getInputStream()获得的输入流将指向客户端Socket对象socketAtClient使用方法getOutputStream()获得的那个输出流。因此,当服务器向这个输

18、出流写入信息时,客户端通过相应的输入流就能读取,反之亦然。,客户机向服务器发送信息的简单代码PrintWriter out=new PrintWriter(clientSocket.getOutputStream();String str=来自客户机的信息;out.println(str);/将要发送的信息写入out中out.flush();/强制将out中的数据送出clientSocket.close();/关闭连接端口,C/S之间通讯代码,服务器接收客户机信息的简单代码BufferedReader in=new BufferedReader(new InputStreamReader(se

19、rverSocket.getInputStream();/从Socket端口读入信息String str=in.readLine();System.out.println(str);serverSocket.close();,套接字调用 close()可以关闭双方的套接字连接,只要一方关闭连接,就会导致对方发生IOException异常。下面我们通过一个简单的例子说明上面讲的概念。,7.3 TCP通信程序,【例1】一个简单TCP通信程序,客户端程序向服务器程序发送任意的字符串,服务器程序收到后,显示收到的字符串。首先建立一个TCP服务器程序。在这个程序中,创建一个在8866端口上等待连接的Se

20、rverSocket对象。当接收到一个客户端的连接请求后,程序从与这个客户建立连接的Socket对象中获得输入流对象。通过输入流读取客户端程序发送的字符串。再建立TCP 客户端程序。由于是本地连接,TCP服务器的IP地址是127.0.0.1,客户端需要与通过服务器的8866端口建立连接完成通信,所以在客户端指定要与服务器连接的端口号为8866。同样,客户端利用创建的Socket对象来获得输出流对象。通过输出流向服务器端发送字符串。,7.3 TCP通信程序,运行上面的TCP客户服务器程序。首先在客户端文本框中输入字符串,按下回车键,这些字符串将显示在客户端的窗口上。并且,这些数据将发送给服务器端

21、,服务器端接受到从客户端发送的字符串,将显示在窗口上,如图7.3.3、图7.3.4所示。,图7.3.3服务器端 图7.3.4 客户端,7.3 TCP网络编程,Socket类的常用方法如表13.1所示。,表7.3.1 Socket类的常用方法,7.3 TCP网络编程,ServerSocket类的常用方法如表7.3.2所示。,表7.3.2 ServerSocket类的常用方法,7.3 TCP通信程序,【例1】一个简单TCP通信程序,客户端程序向服务器程序发送任意的字符串,服务器程序收到后,显示收到的字符串。首先建立一个TCP服务器程序。在这个程序中,创建一个在8866端口上等待连接的ServerS

22、ocket对象。当接收到一个客户端的连接请求后,程序从与这个客户建立连接的Socket对象中获得输入流对象。通过输入流读取客户端程序发送的字符串。再建立TCP 客户端程序。由于是本地连接,TCP服务器的IP地址是127.0.0.1,客户端需要与通过服务器的8866端口建立连接完成通信,所以在客户端指定要与服务器连接的端口号为8866。同样,客户端利用创建的Socket对象来获得输出流对象。通过输出流向服务器端发送字符串。,7.3 TCP通信程序,运行上面的TCP客户服务器程序。首先在客户端文本框中输入字符串,按下回车键,这些字符串将显示在客户端的窗口上。并且,这些数据将发送给服务器端,服务器端

23、接受到从客户端发送的字符串,将显示在窗口上,如图7.3.3、图7.3.4所示。,图7.3.3服务器端 图7.3.4 客户端,Server和一个客户的对话【例12-3】基于Socket的单客户端程序/客户端程序import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.io.*;import.*;public class ClientDemopublic static void main(String args)trySocket client=new Socket(127.0.0.1,4000);Buff

24、eredReader sin=new BufferedReader(new InputStreamReader(System.in);BufferedReader is=new BufferedReader(new InputStreamReader(client.getInputStream();,PrintWriter os=new PrintWriter(client.getOutputStream();String msg;msg=sin.readLine();while(!msg.equals(bye)os.println(msg);os.flush();System.out.pri

25、ntln(I SAY:+msg);System.out.println(Server SAY:+is.readLine();msg=sin.readLine();System.out.println(The Talk End!);os.close();is.close();client.close();catch(IOException e)System.out.println(Error:+e);,Server和多个客户的对话【例12-4】基于Socket的多客户端程序/多个客户服务端程序import java.awt.*;import java.awt.event.*;import jav

26、ax.swing.*;import java.io.*;import.*;public class ServerToMultiDemostatic int intClient=1;public static void main(String args)throws IOExceptionServerSocket serversocket=null;tryserversocket=new ServerSocket(4000);System.out.println(Server is starting.);catch(IOException e),System.out.println(Error+

27、e);while(true)ServerThread st=new ServerThread(serversocket.accept(),intClient);st.start();intClient+;class ServerThread extends ThreadSocket server;int intCounter;public ServerThread(Socket socket,int num)server=socket;intCounter=num;,public void run()tryString msg;BufferedReader sin=new BufferedRe

28、ader(new InputStreamReader(System.in);BufferedReader is=new BufferedReader(new InputStreamReader(server.getInputStream();PrintWriter os=new PrintWriter(server.getOutputStream();System.out.println(Client+intCounter+:+is.readLine();msg=sin.readLine();while(!msg.equals(bye)os.println(msg);os.flush();Sy

29、stem.out.println(I:+msg);,System.out.println(Client+intCounter+:+is.readLine();msg=sin.readLine();System.out.println(The Talk End!);os.close();is.close();server.close();catch(IOException e)System.out.println(Error:+e);,7.6小结,计算机网络是指计算机通过通信介质相互连接的集合。网络由硬件和软件共同组成以提供各种服务。位于网络中的计算机具有唯一的IP地址,这样不同的主机可以互相区

30、分。为了便于人的记忆,为计算机赋予了不同主机名。在应用程序中,可以通过主机名指定计算机,而在网络层必须通过IP地址来指定计算机。客户端服务器是一种最常见的网络应用程序模型。服务器是一个为其客户端提供某种特定服务的硬件或软件。客户机是一个用户应用程序,用于访问某台服务器提供的服务。端口号是对一个服务的访问场所,它用于区分同一物理计算机上的多个服务。套接字用于连接客户端和服务器,客户端和服务器之间的每个通信会话使用一个不同的套接字。TCP协议用于实现面向连接的会话,UDP协议用于实现无连接的会话。Java中有关网络方面的功能都定义在程序包中。Java用InetAddress对象表示IP地址,该对象

31、里有两个字段:主机名(String)和IP地址(int)。类Socket和ServerSocket实现了基于TCP协议的客户端服务器程序。Socket是客户端和服务器之间的一个连接,连接创建的细节被隐藏了。这个连接提供了一个安全的数据传输通道,这是因为TCP协议可以解决数据在传送过程中的丢失、损坏、重复、乱序以及网络拥挤等问题,它保证数据可靠的传送。类DatagramSocket和DatagramPacket实现了基于UDP协议网络程序。DatagramPacket对象封装了UDP数据报,在数据报中包含了客户端的IP地址和端口号以及服务器的IP地址和端口号。UDP数据报通过数据报套接字Data

32、gramSocket发送和接收,系统不保证UDP数据报一定能够安全送到目的地,也不能确定什么时候可以抵达。类URL和URLConnection提供了最高级网络应用。URL的网络资源的位置来同一表示Internet上各种网络资源。通过URL对象可以创建当前应用程序和URL表示的网络资源之间的连接,这样当前程序就可以读取网络资源数据,或者把自己的数据传送到网络上去。,7.6小结,计算机网络是指计算机通过通信介质相互连接的集合。网络由硬件和软件共同组成以提供各种服务。位于网络中的计算机具有唯一的IP地址,这样不同的主机可以互相区分。为了便于人的记忆,为计算机赋予了不同主机名。在应用程序中,可以通过主

33、机名指定计算机,而在网络层必须通过IP地址来指定计算机。客户端服务器是一种最常见的网络应用程序模型。服务器是一个为其客户端提供某种特定服务的硬件或软件。客户机是一个用户应用程序,用于访问某台服务器提供的服务。端口号是对一个服务的访问场所,它用于区分同一物理计算机上的多个服务。套接字用于连接客户端和服务器,客户端和服务器之间的每个通信会话使用一个不同的套接字。TCP协议用于实现面向连接的会话,UDP协议用于实现无连接的会话。Java中有关网络方面的功能都定义在程序包中。Java用InetAddress对象表示IP地址,该对象里有两个字段:主机名(String)和IP地址(int)。类Socket

34、和ServerSocket实现了基于TCP协议的客户端服务器程序。Socket是客户端和服务器之间的一个连接,连接创建的细节被隐藏了。这个连接提供了一个安全的数据传输通道,这是因为TCP协议可以解决数据在传送过程中的丢失、损坏、重复、乱序以及网络拥挤等问题,它保证数据可靠的传送。类DatagramSocket和DatagramPacket实现了基于UDP协议网络程序。DatagramPacket对象封装了UDP数据报,在数据报中包含了客户端的IP地址和端口号以及服务器的IP地址和端口号。UDP数据报通过数据报套接字DatagramSocket发送和接收,系统不保证UDP数据报一定能够安全送到目的地,也不能确定什么时候可以抵达。类URL和URLConnection提供了最高级网络应用。URL的网络资源的位置来同一表示Internet上各种网络资源。通过URL对象可以创建当前应用程序和URL表示的网络资源之间的连接,这样当前程序就可以读取网络资源数据,或者把自己的数据传送到网络上去。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号