Socket网络编程.ppt

上传人:s****8 文档编号:67639683 上传时间:2022-12-26 格式:PPT 页数:48 大小:184.50KB
返回 下载 相关 举报
Socket网络编程.ppt_第1页
第1页 / 共48页
Socket网络编程.ppt_第2页
第2页 / 共48页
点击查看更多>>
资源描述

《Socket网络编程.ppt》由会员分享,可在线阅读,更多相关《Socket网络编程.ppt(48页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第17章 Socket网络编程第第17章章 Socket网络编程网络编程17.1 网络基础网络基础 17.2 URL17.3 Socket编程编程17.4 NIO非阻塞式网络编程非阻塞式网络编程第17章 Socket网络编程17.1 网络基础网络基础 n 计算机网络计算机网络 把分布在不同地理区域的计算机与专门的外部设备把分布在不同地理区域的计算机与专门的外部设备用通信线路连接成一个规模大、功能强的网络系统,用通信线路连接成一个规模大、功能强的网络系统,而使计算机可以方便的传递信息,共享硬件、软件、而使计算机可以方便的传递信息,共享硬件、软件、数据信息等资源,称为计算机网络。数据信息等资源,称

2、为计算机网络。第17章 Socket网络编程17.1 网络基础网络基础 网络分类:网络分类:n 规模和范围:局域网,城域网和广域网规模和范围:局域网,城域网和广域网n 网络拓扑结构:星型、总线、环线等网络拓扑结构:星型、总线、环线等n 传输介质:双绞线,同轴电缆和光纤等传输介质:双绞线,同轴电缆和光纤等第17章 Socket网络编程17.1 网络基础网络基础 网络工作模式:网络工作模式:n 客户机客户机/服务器模式服务器模式(client/server)n 浏览器浏览器/服务器模式服务器模式(browser/server)n 对等式网络:(对等式网络:(Peer-to-Peer)n 专用服务器

3、结构专用服务器结构(Server-Based)第17章 Socket网络编程17.1 网络基础网络基础 n 网络通信协议网络通信协议 计算机想在网络间进行通信必须遵循一定的标准。计算机想在网络间进行通信必须遵循一定的标准。如对数据传输速率的限制,传输数据格式的限制,出如对数据传输速率的限制,传输数据格式的限制,出错控制等等。这些标准往往以协议的形式出现。错控制等等。这些标准往往以协议的形式出现。第17章 Socket网络编程17.1 网络基础网络基础 主要的网络协议:主要的网络协议:n NetBEUI:短小精悍、通信效率高的广播型协议短小精悍、通信效率高的广播型协议 n IPX/SPX:多用在

4、联机游戏中多用在联机游戏中n TCP/IP:传输控制协议传输控制协议/互联网协议互联网协议还有还有HTTP,FTP,SMTP,UDP和和POP3/IMAP等等协议协议第17章 Socket网络编程17.1 网络基础网络基础 TCP/IP协议:协议:是是Internet上不同系统之间互联的一组协议。它为上不同系统之间互联的一组协议。它为分散和不同类型的硬件提供了一个通用的编程接口。分散和不同类型的硬件提供了一个通用的编程接口。TCP/IP 协议使协议使Internet尽可能成为一个分散、无序的尽可能成为一个分散、无序的网络。网络。TCP协议,是面向连接的可靠的数据传输协议。协议,是面向连接的可靠

5、的数据传输协议。IP协议支持网络间连接的数据报通信。一般将协议支持网络间连接的数据报通信。一般将TCP/IP协协议结合使用。议结合使用。第17章 Socket网络编程17.1 网络基础网络基础 n IP地址、域名和端口地址、域名和端口 IP地址:地址:为了实现为了实现Internet上不同计算机之间的通信,每台计上不同计算机之间的通信,每台计算机都必须有一个不与其它计算机重复的地址算机都必须有一个不与其它计算机重复的地址-IP地地址。址。IP地址是数字型的,地址是数字型的,32位位(32bit),由,由4个个 8位的二位的二进制数组成,每进制数组成,每8位之间用圆点隔开,如位之间用圆点隔开,如

6、192.168.6.101。第17章 Socket网络编程17.1 网络基础网络基础 域名域名:IP地址应数字太多难以记忆,实际应用中人们常采地址应数字太多难以记忆,实际应用中人们常采用另一种字符表示的地址,即域名来查找主机。如用另一种字符表示的地址,即域名来查找主机。如“”,域名相对来说比较容易记忆,但却不,域名相对来说比较容易记忆,但却不能直接用于网络主机的查找,域名只能被域名服务器能直接用于网络主机的查找,域名只能被域名服务器解析转化为解析转化为IP地址后才能起到作用。地址后才能起到作用。第17章 Socket网络编程17.1 网络基础网络基础 端口端口:端口是计算机与外界交流的出入口。

7、端口可以理解端口是计算机与外界交流的出入口。端口可以理解为是计算机连接网络的逻辑接口为是计算机连接网络的逻辑接口,不是真正的物理意义不是真正的物理意义上的端口,是一个逻辑的概念。上的端口,是一个逻辑的概念。通过端口应用机制才可使一台计算机可能提供多种通过端口应用机制才可使一台计算机可能提供多种服务,共享一条物理通道。服务,共享一条物理通道。第17章 Socket网络编程17.1 网络基础网络基础 端口端口:一个计算机系统能提供的端口号的取值范围从一个计算机系统能提供的端口号的取值范围从0到到65535,其中,从,其中,从0到到1023个这个这1024个端口是一些公用个端口是一些公用服务的端口,

8、一般称为公认端口,比如服务的端口,一般称为公认端口,比如ftp服务的默认服务的默认端口是端口是21,http服务的默认端口是服务的默认端口是80。第17章 Socket网络编程【例题【例题17-1】获取获取IP地址演示地址演示 public class InetAddressDemo public static void main(String args)throws UnknownHostException InetAddress ia;ia=InetAddress.getLocalHost();System.out.println(ia.getHostName();System.out.p

9、rintln(ia.getHostAddress();ia=InetAddress.getByName();System.out.println(ia.getHostName();System.out.println(ia.getHostAddress();17.1 网络基础网络基础第17章 Socket网络编程【例题【例题17-1】获取获取IP地址演示地址演示 程序运行结果:程序运行结果:175.174.63.43第17章 Socket网络编程17.2 URL URL(Uniform Resource Locators,统一资源定位,统一资源定位器)是一种用来进行资源定位的工具。器)是一种用

10、来进行资源定位的工具。URL值是使用值是使用数字和字母的排列来表示网络中的某一资源(文件、数字和字母的排列来表示网络中的某一资源(文件、目录、对对象的引用)的地址。目录、对对象的引用)的地址。URL的基本结构:的基本结构:/主机名:端口号主机名:端口号/文文件名件名#引用引用 如:如:http:/ Socket网络编程17.2 URL URL类位于类位于包中,表示包中,表示URL地址。地址。构造方法:构造方法:URL(addr);常用方法:常用方法:ngetProtocol():返回:返回URL中的协议名称中的协议名称ngetHost():返回:返回URL中的主机名。中的主机名。ngetPor

11、t():返回:返回URL中的端口号。如果中的端口号。如果URL中没中没有设定端口号,该函数返回有设定端口号,该函数返回-1。第17章 Socket网络编程【例题【例题17-2】URL演示演示 public class URLDemo public static void main(String args)try URL url=new URL(http:/);System.out.println(the protocol:+url.getProtocol();System.out.println(the hostname:+url.getHost();System.out.println(th

12、e port:+url.getPort();catch(MalformedURLException e)System.out.println(e);17.1 网络基础网络基础第17章 Socket网络编程【例题【例题17-2】URL演示演示 程序运行结果:程序运行结果:the protocol:httpthe hostname:the port:-1第17章 Socket网络编程17.3 Socket编程编程 Socket 套接字用于在主机和套接字用于在主机和Internet之间建立可靠之间建立可靠的、双向的、持续的、点对点的流式连接。一个套接的、双向的、持续的、点对点的流式连接。一个套接字可

13、以用来建立字可以用来建立Java 的输入的输入/输出系统到其他的驻留在输出系统到其他的驻留在本地机或本地机或Internet上的任何机器的程序的连接。上的任何机器的程序的连接。应用程序通过应用程序通过Socket向网络发出请求或者应答网络向网络发出请求或者应答网络请求,请求,Socket隐藏了数据流传输中的复杂性。隐藏了数据流传输中的复杂性。第17章 Socket网络编程17.3 Socket编程编程 ServerSocket/Socket两个类用于建立一来自客户端两个类用于建立一来自客户端的连接,而且是双边的通信。的连接,而且是双边的通信。ServerSocket等待等待Socket 连接到

14、一个服务器端。连接到一个服务器端。第17章 Socket网络编程Server端ServerSocket(port#)s.accept()/等待连接SocketOutputStreamInputStremsocket.close()Client端Socket(host,port#)(试图连接)OutputStreamInputStreamsocket.close()Socket通信模型通信模型第17章 Socket网络编程17.3 Socket编程编程 ServerSocket类用来创建服务器,服务器监听本地或类用来创建服务器,服务器监听本地或远程客户程序通过公共端口的连接。远程客户程序通过公共

15、端口的连接。构造方法:构造方法:n ServerSocket(int port)在指定端口创建队列长度在指定端口创建队列长度为为50的服务器套接字。的服务器套接字。n ServerSocket(int port,int maxQueue)在指定端在指定端口创建一个最大队列长度为口创建一个最大队列长度为maxQueue的服务器套的服务器套接字。接字。第17章 Socket网络编程17.3 Socket编程编程 常用方法:常用方法:n Socket accept():用于接收一个客户机的连接。:用于接收一个客户机的连接。如果有客户机连接到它所创建的监听端口时,返回如果有客户机连接到它所创建的监听端

16、口时,返回一个一个Socket实例,否则,等待下去。实例,否则,等待下去。n close():关闭连接。:关闭连接。第17章 Socket网络编程17.3 Socket编程编程 Socket类用于创建类用于创建Socket对象对象。构造方法:构造方法:n Socket():通过系统默认类型创建未连接套接字通过系统默认类型创建未连接套接字 n Socket(InetAddress address,int port):创建一创建一个流套接字并将其连接到指定个流套接字并将其连接到指定 IP 地址的指定端口地址的指定端口 n Socket(String host,int port):创建一个流套接创建

17、一个流套接字并将其连接到指定主机上的指定端口号字并将其连接到指定主机上的指定端口号第17章 Socket网络编程17.3 Socket编程编程 常用方法:常用方法:n getInputStream():获取输入流。:获取输入流。n getOutputStream():获取输出流。:获取输出流。n close():关闭连接。:关闭连接。第17章 Socket网络编程17.3 Socket编程编程 Socket网络编程步骤:网络编程步骤:在服务器端创建一个指定端口号的在服务器端创建一个指定端口号的ServerSocket对象。对象。运行运行ServerSocket对象的对象的accept()方法,

18、在指定端方法,在指定端口等待客户端请求,建立连接。口等待客户端请求,建立连接。在客户端创建一个指定计算机地址和与服务器端在客户端创建一个指定计算机地址和与服务器端具有相同端口号的具有相同端口号的Socket对象,由对象,由Socket对象向对象向服务器端发出连接请求。服务器端发出连接请求。第17章 Socket网络编程17.3 Socket编程编程 Socket网络编程步骤:网络编程步骤:服务器端的服务器端的ServerSocket对象接到请求信息后,对象接到请求信息后,创建一个创建一个Socket对象与客户端进行连接。对象与客户端进行连接。连接建立后,服务器端和客户端可分别建立输入连接建立后

19、,服务器端和客户端可分别建立输入输出数据流进行数据传输。输出数据流进行数据传输。通信结束,关闭两端的通信结束,关闭两端的Socket连接。连接。服务器端调用服务器端调用ServerSocket对象的对象的close()停止等待停止等待客户端请求。客户端请求。第17章 Socket网络编程【例题【例题17-3】简单简单Socket通信演示(服务器端)通信演示(服务器端)public class ServerSocketDemo public static void main(String args)ServerSocket server;try server=new ServerSocket(2

20、020);Socket sk=server.accept();System.out.println(客户端连接成功!);DataOutputStream dos=new DataOutputStream(sk.getOutputStream();17.1 网络基础网络基础第17章 Socket网络编程dos.writeUTF(你已连接成功!);dos.writeUTF(再见!);dos.close();server.close();catch(IOException e)System.out.println(e);第17章 Socket网络编程【例题【例题17-3】简单简单Socket通信演示

21、(客户端)通信演示(客户端)public class ClientSocketDemo public static void main(String args)Socket client;try client=new Socket(127.0.0.1,2020);DataInputStream dis=new DataInputStream(client.getInputStream();System.out.println(来自服务器:+dis.readUTF();17.1 网络基础网络基础第17章 Socket网络编程System.out.println(来自服务器:+dis.readUT

22、F();client.close();catch(IOException e)System.out.println(e);第17章 Socket网络编程程序运行结果:程序运行结果:服务器服务器 客户端客户端第17章 Socket网络编程17.3 Socket编程编程 【例题【例题17-3】中只是演示了建立中只是演示了建立Socket连接,然后由连接,然后由服务器向客户端单向传输数据,若想实现双向通信,则服务器向客户端单向传输数据,若想实现双向通信,则必须建立双方的输入流和输出流;若想同时还实现双方必须建立双方的输入流和输出流;若想同时还实现双方按任意顺序传输数据,一般需要结合多线程技术。按任意

23、顺序传输数据,一般需要结合多线程技术。下面的例子演示了一个自由聊天程序的设计方法。下面的例子演示了一个自由聊天程序的设计方法。第17章 Socket网络编程【例题【例题17-3】自由聊天演示(服务器端)自由聊天演示(服务器端)public class ChatServerSocketDemo public static void main(String args)ServerSocket server;try server=new ServerSocket(2020);Socket sk=server.accept();System.out.println(客户端连接成功!);17.3 Soc

24、ket编程编程第17章 Socket网络编程 DataInputStream dis=new DataInputStream(sk.getInputStream();DataOutputStream dos=new DataOutputStream(sk.getOutputStream();new ServerReader(dis).start();new ServerWriter(dos).start();catch(IOException e)System.out.println(e);第17章 Socket网络编程 class ServerReader extends Thread Da

25、taInputStream dis;public ServerReader(DataInputStream dis)this.dis=dis;public void run()String str;try while(true)str=dis.readUTF();System.out.println(客户端说:+str);第17章 Socket网络编程if(str.equals(bye)System.out.println(对方下线+str);System.exit(0);catch(IOException e)System.out.println(e);第17章 Socket网络编程 cla

26、ss ServerWriter extends Thread DataOutputStream dos;public ServerWriter(DataOutputStream dos)this.dos=dos;public void run()InputStreamReader isr=new InputStreamReader(System.in);BufferedReader br=new BufferedReader(isr);String str;try while(true)str=br.readLine();dos.writeUTF(str);第17章 Socket网络编程 Sy

27、stem.out.println(服务器说:+str+n);if(str.equals(bye)System.out.println(自己下线);System.exit(0);catch(IOException e)System.out.println(e);第17章 Socket网络编程【例题【例题17-4】自由聊天演示(客户端)自由聊天演示(客户端)public class ChatClientSocketDemo public static void main(String args)Socket client;try client=new Socket(127.0.0.1,2020);

28、DataInputStream dis=new DataInputStream(client.getInputStream();DataOutputStream dos=new DataOutputStream(client.getOutputStream();17.3 Socket编程编程第17章 Socket网络编程 new ClientReader(dis).start();new ClientWriter(dos).start();catch(IOException e)System.out.println(e);第17章 Socket网络编程 class ClientReader e

29、xtends Thread DataInputStream dis;public ClientReader(DataInputStream dis)this.dis=dis;public void run()String str;try while(true)str=dis.readUTF();System.out.println(服务器说:+str);第17章 Socket网络编程if(str.equals(bye)System.out.println(对方下线+str);System.exit(0);catch(IOException e)System.out.println(e);第17

30、章 Socket网络编程 class ClientWriter extends Thread DataOutputStream dos;public ClientWriter(DataOutputStream dos)this.dos=dos;public void run()InputStreamReader isr=new InputStreamReader(System.in);BufferedReader br=new BufferedReader(isr);String str;try while(true)第17章 Socket网络编程 str=br.readLine();dos.

31、writeUTF(str);System.out.println(客户端说:+str+n);if(str.equals(bye)System.out.println(自己下线);System.exit(0);catch(IOException e)System.out.println(e);第17章 Socket网络编程程序运行结果:程序运行结果:服务器服务器 客户端客户端第17章 Socket网络编程17.4 NIO非阻塞式网络编程非阻塞式网络编程 采用多线程技术可以很好的解决采用多线程技术可以很好的解决I/O操作中的阻塞操作中的阻塞问题,只是在并发线程数目过多的情况下才会出现性问题,只是在

32、并发线程数目过多的情况下才会出现性能下降的问题。能下降的问题。为了提高为了提高Java程序的运行效率,程序的运行效率,SUN公司在公司在JDK1.4版本中引入了版本中引入了NIO技术,非阻塞式技术,非阻塞式I/O是是NIO技技术的重要组成部分。术的重要组成部分。第17章 Socket网络编程17.4 NIO非阻塞式网络编程非阻塞式网络编程 在在非阻塞式非阻塞式I/O技术中,线程在进行读操作时将只技术中,线程在进行读操作时将只读取当前已经可用的数据(而不管有没有,或有多少)读取当前已经可用的数据(而不管有没有,或有多少),然后立即返回执行其他任务,这样做,使得程序始,然后立即返回执行其他任务,这

33、样做,使得程序始终处于运行状态,大幅度提高了程序运行效率终处于运行状态,大幅度提高了程序运行效率。非阻塞式非阻塞式I/O机制主要是围绕机制主要是围绕NIO中的中的“通道通道”(Channel)和)和“选择器选择器”(Selector)技术实现的)技术实现的。第17章 Socket网络编程17.4 NIO非阻塞式网络编程非阻塞式网络编程 要实现基本的要实现基本的非阻塞式非阻塞式Socket网络编程网络编程,将用到以,将用到以下几个类。下几个类。n SocketChannel:套接字的可选择通道:套接字的可选择通道n ServerSocketChannel:服务器端的可选择通道:服务器端的可选择通道n Selector:多路复用器:多路复用器n SelectionKey:选择键:选择键

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁