收藏 分享(赏)

第十六课网络编程 周甫.ppt

上传人:天天快乐 文档编号:1454864 上传时间:2018-07-19 格式:PPT 页数:26 大小:233.02KB
下载 相关 举报
第十六课网络编程  周甫.ppt_第1页
第1页 / 共26页
第十六课网络编程  周甫.ppt_第2页
第2页 / 共26页
第十六课网络编程  周甫.ppt_第3页
第3页 / 共26页
第十六课网络编程  周甫.ppt_第4页
第4页 / 共26页
第十六课网络编程  周甫.ppt_第5页
第5页 / 共26页
点击查看更多>>
资源描述

1、第十六课:网络编程,周甫 ,www.IT,学习目标,www.IT,学习目标,www.IT,1 TCP/IP协议模型,计算机网络的组成部分:计算机系统、数据通信系统、网络软件。其中,网络软件充当网络管理者的角色,它提供并实现各种网络服务,包括网络协议软件(TCP/IP、IPX等协议驱动)、网络服务软件、网络工具软件、网络操作系统(Netware、NT局域网系统)。,www.IT,网络通信协议 网络协议是构成网络的基本组件之一,协议是若干规则和协定的组合,一般指机器1的第n层与机器2的第n层的对话,这种对话中所使用的若干规则和约束便称为第n层网络协议。TCP/IP网络体系结构模型就是遵循TCP/I

2、P协议进行通信的一种分层体系,现今,Internet和Intranet所使用的协议一般都为TCP/IP协议。TCP/IP协议是一个工业标准协议套件,专为跨大广域网(WAN)的大型互联网络而设计。在了解该协议之前,我们必须掌握基于该协议的体系结构层次,而TCP/IP体系结构分为四层,具体结构如图:*,www.IT,通信端口 每一个应用协议都有其特定的端口,通过端口实现服务器同时能够服务于很多不同的客户端,服务器进程通过监听端口来捕获客户端连接。一个服务器允许在同个端口接受多个客户,一个服务器也能开启多个端口接受客户请求。能够接受并管理多个客户连接的服务器进程必须是支持多线程的(或者采用同步输入/

3、输出处理多路复用技术的其他方法) *,www.IT,2 基于Java的网络技术,TCP/IP套接字 套接字是网络软件中的一个抽象概念,套接字允许单个计算机同时服务于很多不同客户,并能够提供不同类型信息的服务。该技术由引入的端口处理,该端口既是一个特定机器上的一个被编号的套接字-通信端口.TCP/IP套接字用于在主机和Internet之间建立的可靠、双向、点对点、持续的流式连接。,www.IT,在java中,TCP/IP Socket连接是用包中的类实现的,这些类实现了建立网络连接和通过连接发送数据的复杂过程,我们只需使用其简单接口就能实现网络通信!在java中有两类套接字,一种是服务器端套接字

4、-.ServerSocket,另一种是客户端套接字-.Socket。,www.IT,1.ServerSocket 其中,ServerSocket被设计成在等待客户建立连接之前不做任何事情的监听器,构造方法的版本如下:public ServerSocket(int port) throws IOExceptionpublic ServerSocket(int port, int maxQueue) throws IOExceptionpublic ServerSocket (int port, int maxQueue, InetAddress bindAddr ) throws IOExcep

5、tion*,www.IT,ServerSocket还定义了以下一些常用的方法:public Socket accept() throws IOExceptionpublic void bind(SocketAddress endpoint) throws IOExceptionpublic void close() throws IOException*,www.IT,分析以下代码:. try /在服务器的8000端口创建一个ServerSocketServerSocket server = new ServerSocket(8000);/accept()方法使当前服务器线程暂停,之前创建的s

6、erver套接字将通过该方法不停的监听指定端口是否有客户端请求连接发送过来,如果有正确连接发送过来,/则该方法返回一个表示连接已建立的Socket对象Scoket fromSocket = server.accept();if (fromSocket != null)/通过套接字实现数据传输/得到套接字的输入流InputStream input = fromSocket.getInputStream();/得到套接字的输出流OutputStream out = fromSocket.getOutputStream();/通过得到的输入、输出流实现数据的读取.catch(IOException

7、e),www.IT,通过上面的代码,我们分析得知,套接字只是实现数据传输的接口,真正实现数据传输的是封装在套接字中的输入、输出流。以上代码是服务器端程序,该程序开启了一个端口号为8000的特定端口,并且开启了服务器套接字在该端口上监听客户请求,accept()方法阻塞当前线程直到有客户端请求发送过来,当请求正确时,该方法将客户端套接字引用传递出来,这样,网络之间的数据发送就好像是本地数据调用。*,www.IT,2 Socket 该类为建立连向服务器套接字及启动协议交换而设计,当进程通过网络进行通信的时候,java技术使用流模型来实现数据的通信。一个Socket包括两个流,分别为一个输入流和一个

8、输出流,一个进程如果要通过网络向另一个进程发送数据,只需简单地写入与Socket相关联的输出流,同样,一个进程通过从与Socket相关联的输入流来读取另一个进程所写的数据。如果通过TCP/IP协议建立连接,则服务器必须运行一个单独的进程来等待连接,而某一客户机必须试图到达服务器,就好比某人打电话,必须保证另一方等待电话呼叫,这样才能实现两人之间的通信。,www.IT,Socket类的相关方法:Socket()Socket(String host, int port)Socket(InetAddress net, int port)public OutputStream getOutputStr

9、eam() throws IOExceptionpublic InputStream getInputStream() throws IOExceptionpublic SocketChannel getChannel()public void close() throws IOException,www.IT,下面是客户端的部分代码:try/创建套接字,该套接字连接IP地址为127.0.0.1的服务器,并向端口号为8000的端口连接Socket server = new Socket(127.0.0.1,8000);if (server != null)/通过套接字实现数据传输/得到套接字的

10、输入流InputStream input = server.getInputStream();/得到套接字的输出流OutputStream out = server.getOutputStream();/通过得到的输入、输出流实现数据的读取. 以上即是简单的基于Tcp/IP协议、使用套接字实现数据传输的服务器和客户端代码 *,www.IT,UDP套接字 UDP(User Datagrams Protocol)用户数据报协议,是一种使用数据报的机制来传递信息的协议。数据报(Datagrams)是一种在不同机器之间传递的信息包,该信息包一旦从某一机器被发送给指定目标,那么该发送过程并不会保证数据一

11、定到达目的地,甚至不保证目的地的存在真实性。反之,数据报被接受时,不保证数据没有受损,也不保证发送该数据报的机器仍在等待响应。*,www.IT,1 DatagramPacket 该类主要有四个常用构造方法,分别如下: DatagramPacket(byte buff, int length) DatagramPacket(byte buf, int offset, int length) DatagramPacket(byte buf, int length, InetAddress address, int port) DatagramPacket(byte buf, int offset,

12、 int length, InetAddress address, int port),www.IT,常用的几个方法如下: byte getData() 用于得到发送过来的DatagramPacket中的数据 void setData(byte buf) 用于将buf中的数据写入DatagramPacket中,以备发送。 InetAddress getAddress() 返回目标的InetAddress,一般用于发送.,www.IT,2 DatagramSocket DatagramSocket() 创建一个以当前计算机的任意可用端口为发送端口的数据报连接 DatagramSocket(int

13、 port) 创建一个以当前计算机的port端口为发送端口的数据报连接 DatagramScoket(int port, InetAddress address) 创建一个以当前计算机的port端口为发送端口,向IP地址为address的计算机发送数据报连接,www.IT,常用的几个方法:void close() throws IOException 关闭数据报连接void recieve(DatagramPacket packet) 接收来自于packet数据报的信息void send(DatagramPacket packet) 发送packet数据报void connect(InetAd

14、dress address, int port) 以当前计算机指定端口port为发送端口,向IP地址为address的计算机发送数据报连接void disconnect() 断开连接DatagramChannel getChannel() 和SocketChannel类似 *,www.IT,3 InetAddress类的使用,.InetAddress类是java的IP地址封装类,内部隐藏了IP地址,可以通过它很容易的使用主机名以及IP地址。一般共各种网络类使用。直接由Object类派生并实现了序列化接口。该类用两个字段表示一个地址:hostName与address。hostName包含主机名,

15、address包含IP地址。InetAddress支持ipv4与ipv6地址。,www.IT,一些常用方法如下: byte getAddress() 返回指定对象的IP地址的以网络字节为顺序的4个元素的字节数组static InetAddress getByName(String hostname) 使用DNS查找hostname的IP地址,并返回static InetAddress getLocalHost() 返回本地计算机的InetAddress。String getHostName() 返回指定InetAddress对象的主机名。String getHostAddress() 返回指定

16、InetAddress对象的主机地址的字符串形式,www.IT,分析:InetAddress addr = InetAddress.getByName();System.out.println(addr);以上代码将打印网址域名为的对应IP地址因此,在网络编程中,我们可以很方便的使用InetAddress类实现Ip地址的各种操作。*,www.IT,如何编写一个多线程的服务器?将SimpleServer修改如下:.int clientNo = 1;while(true)Socket fromClient = server.accept();System.out.println(Start thr

17、ead for client: + clientNo);System.out.println(接受连接: + fromClient);ThreadClient t = new ThreadClient(fromClient, clientNo);t.start();clientNo +;.,www.IT,class ThreadClient extends Thread.public void run()tryBufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream();Print

18、Writer out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream();while(true)String s = input.readLine();System.out.println(From + clientNo + Client: + s);if(s.equals(bye)break;out.println(s);out.flush();.*,www.IT,独立实践,实践1编写一个单线程的聊天程序,即只能一对一的聊天程序。实践2. 改造课堂练习的多线程服务端,使得客户端能看到所有客户端发出的信息。实践3编写一个多线程服务端用来计算圆面积,从客户端接受半径输入然后将计算结果返回给客户端。,

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

当前位置:首页 > 企业管理 > 经营企划

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报