您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > Socket网络编程
第17章Socket网络编程Socket网络编程1网络基础2URL3Socket编程4NIO非阻塞式网络编程第17章Socket网络编程1网络基础计算机网络把分布在不同地理区域的计算机与专门的外部设备用通信线路连接成一个规模大、功能强的网络系统,而使计算机可以方便的传递信息,共享硬件、软件、数据信息等资源,称为计算机网络。第17章Socket网络编程1网络基础网络分类:规模和范围:局域网,城域网和广域网网络拓扑结构:星型、总线、环线等传输介质:双绞线,同轴电缆和光纤等第17章Socket网络编程1网络基础网络工作模式:客户机/服务器模式(client/server)浏览器/服务器模式(browser/server)对等式网络:(Peer-to-Peer)专用服务器结构(Server-Based)第17章Socket网络编程1网络基础网络通信协议计算机想在网络间进行通信必须遵循一定的标准。如对数据传输速率的限制,传输数据格式的限制,出错控制等等。这些标准往往以协议的形式出现。第17章Socket网络编程1网络基础主要的网络协议:NetBEUI:短小精悍、通信效率高的广播型协议IPX/SPX:多用在联机游戏中TCP/IP:传输控制协议/互联网协议还有HTTP,FTP,SMTP,UDP和POP3/IMAP等协议第17章Socket网络编程1网络基础TCP/IP协议:是Internet上不同系统之间互联的一组协议。它为分散和不同类型的硬件提供了一个通用的编程接口。TCP/IP协议使Internet尽可能成为一个分散、无序的网络。TCP协议,是面向连接的可靠的数据传输协议。IP协议支持网络间连接的数据报通信。一般将TCP/IP协议结合使用。第17章Socket网络编程1网络基础IP地址、域名和端口IP地址:为了实现Internet上不同计算机之间的通信,每台计算机都必须有一个不与其它计算机重复的地址---IP地址。IP地址是数字型的,32位(32bit),由4个8位的二进制数组成,每8位之间用圆点隔开,如192.168.6.101。第17章Socket网络编程1网络基础域名:IP地址应数字太多难以记忆,实际应用中人们常采用另一种字符表示的地址,即域名来查找主机。如“”,域名相对来说比较容易记忆,但却不能直接用于网络主机的查找,域名只能被域名服务器解析转化为IP地址后才能起到作用。第17章Socket网络编程1网络基础端口:端口是计算机与外界交流的出入口。端口可以理解为是计算机连接网络的逻辑接口,不是真正的物理意义上的端口,是一个逻辑的概念。通过端口应用机制才可使一台计算机可能提供多种服务,共享一条物理通道。第17章Socket网络编程1网络基础端口:一个计算机系统能提供的端口号的取值范围从0到65535,其中,从0到1023个这1024个端口是一些公用服务的端口,一般称为公认端口,比如ftp服务的默认端口是21,http服务的默认端口是80。第17章Socket网络编程【例题1-1】获取IP地址演示publicclassInetAddressDemo{publicstaticvoidmain(Stringargs[])throwsUnknownHostException{InetAddressia;ia=InetAddress.getLocalHost();System.out.println(ia.getHostName());System.out.println(ia.getHostAddress());ia=InetAddress.getByName();System.out.println(ia.getHostName());System.out.println(ia.getHostAddress());}}1网络基础第17章Socket网络编程【例题1-1】获取IP地址演示程序运行结果:xiejinjun192.168.6.101(UniformResourceLocators,统一资源定位器)是一种用来进行资源定位的工具。URL值是使用数字和字母的排列来表示网络中的某一资源(文件、目录、对对象的引用)的地址。URL的基本结构:传输协议名称://〈主机名〉:〈端口号〉/〈文件名〉#〈引用〉如:第17章Socket网络编程2URLURL类位于java.net包中,表示URL地址。构造方法:URL(addr);常用方法:getProtocol():返回URL中的协议名称getHost():返回URL中的主机名。getPort():返回URL中的端口号。如果URL中没有设定端口号,该函数返回-1。第17章Socket网络编程【例题1-2】URL演示publicclassURLDemo{publicstaticvoidmain(String[]args){try{URLurl=newURL();System.out.println(theprotocol:+url.getProtocol());System.out.println(thehostname:+url.getHost());System.out.println(theport:+url.getPort());}catch(MalformedURLExceptione){System.out.println(e);}}}1网络基础第17章Socket网络编程【例题1-2】URL演示程序运行结果:theprotocol:httpthehostname:第17章Socket网络编程3Socket编程Socket套接字用于在主机和Internet之间建立可靠的、双向的、持续的、点对点的流式连接。一个套接字可以用来建立Java的输入/输出系统到其他的驻留在本地机或Internet上的任何机器的程序的连接。应用程序通过Socket向网络发出请求或者应答网络请求,Socket隐藏了数据流传输中的复杂性。第17章Socket网络编程3Socket编程ServerSocket/Socket两个类用于建立一来自客户端的连接,而且是双边的通信。ServerSocket等待Socket连接到一个服务器端。第17章Socket网络编程Server端ServerSocket(port#)s.accept()/等待连接SocketOutputStreamInputStremsocket.close()Client端Socket(host,port#)(试图连接)OutputStreamInputStreamsocket.close()Socket通信模型第17章Socket网络编程3Socket编程ServerSocket类用来创建服务器,服务器监听本地或远程客户程序通过公共端口的连接。构造方法:ServerSocket(intport)在指定端口创建队列长度为50的服务器套接字。ServerSocket(intport,intmaxQueue)在指定端口创建一个最大队列长度为maxQueue的服务器套接字。第17章Socket网络编程3Socket编程常用方法:Socketaccept():用于接收一个客户机的连接。如果有客户机连接到它所创建的监听端口时,返回一个Socket实例,否则,等待下去。close():关闭连接。第17章Socket网络编程3Socket编程Socket类用于创建Socket对象。构造方法:Socket():通过系统默认类型创建未连接套接字Socket(InetAddressaddress,intport):创建一个流套接字并将其连接到指定IP地址的指定端口Socket(Stringhost,intport):创建一个流套接字并将其连接到指定主机上的指定端口号第17章Socket网络编程3Socket编程常用方法:getInputStream():获取输入流。getOutputStream():获取输出流。close():关闭连接。第17章Socket网络编程3Socket编程Socket网络编程步骤:①在服务器端创建一个指定端口号的ServerSocket对象。②运行ServerSocket对象的accept()方法,在指定端口等待客户端请求,建立连接。③在客户端创建一个指定计算机地址和与服务器端具有相同端口号的Socket对象,由Socket对象向服务器端发出连接请求。第17章Socket网络编程3Socket编程Socket网络编程步骤:④服务器端的ServerSocket对象接到请求信息后,创建一个Socket对象与客户端进行连接。⑤连接建立后,服务器端和客户端可分别建立输入输出数据流进行数据传输。⑥通信结束,关闭两端的Socket连接。⑦服务器端调用ServerSocket对象的close()停止等待客户端请求。第17章Socket网络编程【例题1-3】简单Socket通信演示(服务器端)publicclassServerSocketDemo{publicstaticvoidmain(Stringargs[]){ServerSocketserver;try{server=newServerSocket(2020);Socketsk=server.accept();System.out.println(客户端连接成功!);DataOutputStreamdos=newDataOutputStream(sk.getOutputStream());1网络基础第17章Socket网络编程dos.writeUTF(你已连接成功!);dos.writeUTF(再见!);dos.close();server.close();}catch(IOExceptione){System.out.println(e);}}}第17章Socket网络编程【例题1-3】简单Socket通信演示(客户端)publicclassClientSocketDemo{publicstaticvoidmain(Stringargs[]){Socketclient;try{client=newSocket(127.0.0.1,2020);DataInputStreamdis=newDataInputStream(client.getInputStream());System.out.println(来自服务器:+dis.readUTF());1网络基础第17章Socket网络编程System.out.println(来自服务器:+dis.readUTF());client.close();}catch(IOExceptione){System.out.println(e);}}第17章Socket网络编程程序运行结果:服务器客户端第17章Socket网络编程3Socket编程【例题1-3】中只是演示了建立Socket连接,然后由服务器向客户端单向传输数据,若想实现双向通信,则必须建立双方的输入流和输出流;若想同时还实现双方按任意顺序传输数据,一般需要结合多线程技术。下面的例子演示了一个自由聊天程序的设计方法。第17章Socket网络编程【例题1-3】自由聊天演示(服务器端)publicclassChatServerSocketDemo{publicstaticvoidmain(String[]args){ServerSocketserver;try{server=newServerSocket(2020);Socketsk=server.accept();System.out.println(客户端连接成功!);3Socket编程第17章Socket网络编程D
本文标题:Socket网络编程
链接地址:https://www.777doc.com/doc-1272560 .html