1 / 21

第 3 讲 Socket 编程概述

第 3 讲 Socket 编程概述. 教学目标 : 了解网络通信的基本原理与应用开发 掌握 Socket 类与 ServerSocket 类的应用 教学重点、难点: 1. 教学重点: 网络通信原理 客户机 / 服务器( C/S )模式的原理 URL 与 URLConnection 的区别 Socket 类与 ServerSocket 类的应用 2. 教学难点: Socket 类与 ServerSocket 类的应用. 3.1 网络通信的原理.

gay
Download Presentation

第 3 讲 Socket 编程概述

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第3讲 Socket编程概述

  2. 教学目标: • 了解网络通信的基本原理与应用开发 • 掌握Socket类与ServerSocket类的应用 • 教学重点、难点: • 1. 教学重点: • 网络通信原理 • 客户机/服务器(C/S)模式的原理 • URL与URLConnection的区别 • Socket类与ServerSocket类的应用 • 2.教学难点: • Socket类与ServerSocket类的应用

  3. 3.1 网络通信的原理 • 计算机之间的通信是要遵循一定规则的,通信协议就是计算机之间进行通信所要遵循的各种规则的集合。网络中的不同计算机之间要实现准确、迅速地传递信息,可以通过TCP/IP协议建立网络上的两台计算机(程序)之间的可靠连接,并进行双向通信。

  4. (1)常见的几种通信协议 • IP协议 • 在Internet网络通信中主要使用的协议有使用于网络层的IP协议(IP协议使用IP地址使数据投递到正确的计算机上); • T CP、UDP协议 • 适用于传输层的T CP、UDP(TCP和UDP协议使用端口号PORT将数据投递到正确的应用程序)协议;

  5. HTTP、FTP、SMTP、NNTP协议 • 适用于应用层的HTTP、FTP、SMTP、NNTP(主要用于解释数据内容)协议等。 • 例如Java语言中的套接字(Socket)编程就是网络通信协议的一种应用,Java语言将TCP/IP协议封装到Java.net包的Socket和ServerSocket类中。

  6. (2)  IP地址 • 网络中的每台计算机都必须有一个唯一的IP地址作为标识,这个数通常写作一组由“.”号分隔的十进制数,例如,思维论坛的服务器地址为218.5.77.187。正如所见IP地址均由4个部分组成,每个部分的范围都是0~255,以表示8位地址。 • (3) 端口号 • 端口号则是一个数字,其值一般在165535之间,其中11023一般保留用在知名的端口号或特定的UNIX服务,临时使用的端口号可取102465535之间的整数。端口号可以区分一台服务器上同时运行的不同种的服务程序。

  7. 常见的一些internet 服务对应的端口号 • 如下所示: (备注: NNTP---网络新闻传输协议)

  8. (4) InetAddress类 • 在java.net包中,IP地址由一个称为InetAddress的特殊的类来描述。这个类提供了3个用来获得一个InetAddress类的实例的静态方法。 • getLocalHost() // 返回一个本地主机的IP地址 • getByName(String host) //返回对应于指定主机的IP地址 • getAllByName(String host) //对于某个主机有多个IP地址可用于得到一个IP地址数组。

  9. 例: 获取本机的IP地址。 • import java.net.*; • public class getLocalHostTest • { public static void main(String[] args) • { InetAddress myIP=null; • try { myIP=InetAddress.getLocalHost(); • // myIP=InetAddress.getByName(“www.pku.edu.cn”); • // 根据域名自动到DNS上查找IP地址 • } • catch{UnknowHostException e){} • System.out.println(myIP); • } • } • 注意:创建InetAddress类不用构造函数(不用new运算符),而是 • 通过InetAddress类直接调用其静态方法来获取IP地址。

  10. 3.2 URL类 • (1) URL(Uniform Resource Locator统一资源定位器),是三大网络功能中最高级的一种, 通过URL Java程序可以直接读入网络上的数据。 • URL的结构分为传输协议名和资源名称两部分,中间用“://”分隔开。在Internet上表示URL的典型传输协议有http、ftp、gopher和news等几种形式,例如:“http://www.263.net”和“ftp://www.bnu.edu.cn/pub”使用的分别是超文本传输协议和文件传输协议。

  11. (2) URL类对象的创建 • URL(String str):使用完整的URL字符串直接创建一个URL对象。 • 例子:URL myurl=new URL(“http://www.edu.cn”); • URL(String protocal,String host,String file): 用分散的协议名、 主机名和文件名凑合成一个URL对象。 • 例子:URL myurl=new URL(“http”,“www.edu.cn”,“index.html”); • URL(String protocal,String host,String port,String file):用分 • 散的协议名、端口号、主机名和文件名组成一个URL对象。 • 例子:URL myurl=new URL(“http”,“www.edu.cn”,“80”,“index.html”);

  12. URL(URL context,String spec):用给出的URL和基于该URL的一个相对路径构成一个URL对象。 • 常用于Applet小程序中。例如: • URL base_url=new URL(“http://www.bnu.edu.cn:8080/”) • URL url=new URL(base_url,”/java/java.html”); • 代表http://www.bnu.edu.cn:8080/java/java.html • 备注:若创建URL对象时有错误,则构造方法会输出MalformedURLException异常

  13. (3) 通过URL读取WWW服务器上的数据 • /* 将URL位置的数据转成一个数据流,URL对象通过调用openStream()方法直接获取指定URL的输入流,从而读取文件中的原始数据。*/ • try{ URL url=new URL (“http://www.pku.edu.cn/index.html”); • DataInputStream data=new DataInputStream(url.openStream()); • while((line=data.readLine())!=null){ • textarea.append(line); } • data.close();} • catch(MalformedURLException me){} • catch(IOException ie){ • System.out.println("Error IO"); • }

  14. (4) URL连接(URLConection) • 使用URL类可以很简便的获得信息,但是如果还需要向远程的计算机节点传送信息,就需要使用URLConnection类,URL类对象通过调用openConnection(),建立一个到达该URL的连接。其基本步骤如下: 建立连接 • URL url=new URL(“http://www.yahoo.com/”); • URLConnection con=url.openConnection(); 向服务器端发送数据 • PrintStream outStream=new PrintStream(con.getOutputStream()); • outStream.println(string_data);

  15. 从服务器读数据 • DataInputStream inStream=new • DataInputStream(con.getInputStream()); • inStream.readLine(); • 注意:URL和URLConnection的区别在于前者代表一个资源的位置,后者代表一种连接。此外,使用PrintStream()可以自动为您进行字元转换的动作,它会使用作业系统的预设编码来处理对应的字元转换动作。

  16. 3.3 套接字 • (1) 什么是Socket? • 所谓Socket通常也称为”套接字”,由IP地址和端口号有两部分组成,应用程序通过“套接字”向网络发出请求或者应答网络请求。 • ServerSocket类和Socket类位于java.net包中ServerSocket类用于服务器建立监听套接字,Socket类用于客户机建立套接字对象进行通信。 • 例如,把套接字连接想象为一个电话呼叫,当呼叫完成后,谈话的任何一方都可以随时讲话。但是在最初建立呼叫时,必须有一方呼叫,而另一方则监听铃声。这样,呼叫的一方为“客户”,负责监听的一方是“服务器”。

  17. (2) 客户机/服务器(C/S)模式的原理 • 客户机/服务器(C/S)模式是在网络应用程序中最常用的通信模式。 • 在C/S模式通信过程中主动发起通信的一方被称为客户机,而监听并接受请求进行通信的一方成为服务器。服务器使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,所以一般使用大于1024的端口),等待客户端连接请求,客户端连接后,会话产生,在完成会话后,关闭连接。

  18. (3) 利用Socket方式进行数据通信与传输,大致有如下步骤: • 创建服务器端ServerSocket,设置建立连接的端口号。 • 创建客户端Socket对象,设置绑定的主机名或IP地址,指定连接端口号。 • ServerSocket类的accept方法使服务器处于阻塞状态,等待用户请求 • 客户机Socket发起连接请求。 • 建立连接 • 取得InputStream和OutputStream。 • 利用InputStream和OutputStream进行数据传输。 • 关闭Socket和ServerSocket。

  19. 定义数据成员 定义数据成员 1111 创建Socket实例 创建服务器(端口号) waiting for user 127.0.0.1 1111 服务器等待 网络连接 建立socket流 读socket流 (接收并显示) 建立socket流 connetcting client... login: 向用户发出一个字符串 送用户名给 服务器 java 读客户 端信息 User :java 读socket流 Login successful 提示用户登录成功 关闭流

  20. (4) Socket类的示例: 程序的功能是客户机先向服务器发送一个字符串“你好!我是客户端,向你请求连接”,服务器发现客户机发的请求连接信息,则回应“你好!我是服务器,连接成功” 。 客户输入三角形三边的长度并发送给服务器,服务器把计算出的三角形面积返回给客户。 思路分析: 套接字连接中涉及到输入流和输出流操作,为了不影响我们做其他的事情,应把套接字连接放在一个单独的线程中去进行.另外,服务器端收到一个客户的套接字后,就应该启动一个专门为客户服务的线程.可以把计算量大的工作放在服务器端,客户负责计算量小的工作,实现客户/服务器交互计算,来完成此项任务.

  21. 教学总结: • 1. 实现网络功能靠URL类, URLConection类, Socket类和DatagramSocket类。 • 2. Socket适用于面向连接的,可靠性要求高的应用,Datagram • (数据报)适用于效率要求高的应用,但无法保证可靠性。 • 3. 网络上的数据传送是将网络连接转换成输入输出流,DataInputStream和DataOutputStream (PrintStream)是网间流 • 的载体.

More Related