1、-1-理解计算机网络编程的概念理解TCP/IP协议规范理解UDP协议规范理解域名与DNS的概念掌握基于URL的网络编程掌握基于TCP的C/S网络编程掌握基于Socket的低层次Java网络编程掌握基于Socket的多线程通信目标目标-2-网络基础网络基础 随着计算机技术的的发展,基于网络的应用已成为时代发展的重要标志。通过网络可以将分布在不同区域的计算机、外设、数据资源等用通信线路互联成一个规模大、功能强、资源共享的网络系统,使众多的终端可以方便的互相传递信息、共享硬件、软件、数据信息等资源。-3-网络类型网络类型 按照网络的地理位置可以分为:p局域网(局域网(LAN):一般限定在较小的区域内
2、,小于):一般限定在较小的区域内,小于10km的范的范围,通常采用有线的方式连接起来。围,通常采用有线的方式连接起来。p城域网(城域网(MAN):规模局限在一座城市的范围内,):规模局限在一座城市的范围内,10100km的区域。的区域。p广域网(广域网(WAN):网络跨越国界、洲界,甚至全球范围):网络跨越国界、洲界,甚至全球范围 按照服务方式可以分为:p客户机客户机/服务器网络(服务器网络(Client/Server):服务器是指专门提供服):服务器是指专门提供服务的高性能计算机或专用设备,客户机是用户计算机。务的高性能计算机或专用设备,客户机是用户计算机。p对等网(对等网(Peer-to-
3、Peer):对等网不要求文件服务器,每台客户):对等网不要求文件服务器,每台客户机都可以与其他每台客户机对话,共享彼此的信息资源和硬件机都可以与其他每台客户机对话,共享彼此的信息资源和硬件资源,组网的计算机一般类型相同。资源,组网的计算机一般类型相同。-4-TCP/IP协议协议 TCP/IP(Transmission Control Protocol/Internet Protocol)传输控制协议/互联网络协议。TCP/IP是一种网络通信协议,它规范了网络上的所有通信设备,尤其是一个主机与另一个主机之间的数据往来格式以及传送方式。TCP/IP是INTERNET的基础协议,也是一种电脑数据打包
4、和寻址的标准方法。TCP/IP在INTERNET中几乎可以无差错地传送数据。-5-IP IP是互联网络协议。IP协议提供了能适应各种各样网络硬件的灵活性,对底层网络硬件几乎没有任何要求。IP协议是一个无连接、不可靠的协议。在传输数据之前,它不交换控制信息,数据包只是传送到目的主机,并且假设能被正确的处理。由于IP协议并不重新传输已丢失的数据包或监测受损害的数据,所以IP协议是不可靠的。这种功能可以通过TCP来实现。-6-TCPTCP协议是一种端对端协议。TCP协议为两台计算机之间的建立一个连接、发送和接收数据以及终止连接。TCP协议利用重发技术和拥塞控制机制,向应用程序提供可靠的通信连接,使它
5、能够自动适应网上的各种变化。即使在Internet暂时出现堵塞的情况下,TCP也能够保证通信的可靠;TCP协议具有自动调整“超时值”的功能,能很好地适应Internet上各种各样的变化,确保传输数值的正确。IP协议只保证计算机能发送和接收分组数据,而TCP协议则可提供一个可靠的、可流控的、全双工的信息流传输服务。IP和TCP这两个协议的功能不尽相同,功能上互补,两者的结合,保证Internet在复杂的环境下正常运行。因此在实际中常把这两个协议统称作TCP/IP协议。-7-UDP协议协议 UDP协议的全称是用户数据包协议,是一种无连接的协议。UDP协议主要作用于不要求分组顺序到达的传输中,分组传
6、输顺序的检查与排序由应用层完成,提供面向事务的简单不可靠信息传送服务。UDP报头由4个域组成,其中每个域各占2个字节,具体如下:源端口号、目标端口号、数据报长度、校验值。UDP协议应用:通常音频、视频和普通数据在传送时使用UDP比较多,比如我们聊天用的QQ就是使用UDP协议。-8-IP地址地址 IP地址是一个32位的二进制地址,分为4组,每组8位,由小数点分开,用四个字节来表示,每个字节的数值范围是0255。IP地址按分为三类:pA类地址的表示范围为:类地址的表示范围为:0.0.0.0126.255.255.255,默认网络掩,默认网络掩码为:码为:255.0.0.0。pB类地址的表示范围为:
7、类地址的表示范围为:128.0.0.0191.255.255.255,默认网络,默认网络掩码为:掩码为:255.255.0.0。pC类地址的表示范围为:类地址的表示范围为:192.0.0.0223.255.255.255,默认网络,默认网络掩码为:掩码为:255.255.255.0。-9-端口端口 端口分为硬件上的接口和软件上的端口。在软件上端口其实是逻辑上的信息通道,包括一些数据结构和I/O缓冲区。端口是通过端口号来标记的,端口号只有整数,范围是从0到65535。按端口号的范围可以分为3大类:p公认端口:从公认端口:从0到到1023,绑定于一些服务。,绑定于一些服务。p注册端口:从注册端口:
8、从1024到到49151。松散地绑定于一些服务。松散地绑定于一些服务。p动态和动态和/或私有端口:从或私有端口:从49152到到65535。常用的端口及对应的服务:端口号端口号服务服务7Echo服务端口21FTP服务端口23Telnet服务端口25SMTP服务端口80HTTP服务端口-10-域名与域名与DNS 域名(Domain Name)是由一串用“.”分隔的字符串组成,用于标识计算机的电子方位。域名不仅便于记忆,而且在IP地址发生变化时,域名仍可保持不变。常用的域名分为:p 国际域名:也叫国际顶级域名,使用最早也最广泛的域名。例如表示工商企国际域名:也叫国际顶级域名,使用最早也最广泛的域名
9、。例如表示工商企业的业的.com,表示网络提供商的,表示网络提供商的.net,表示非盈利组织的,表示非盈利组织的.org等。等。p 国内域名:也叫国内顶级域名。即按照国家的不同分配不同后缀,这些域名国内域名:也叫国内顶级域名。即按照国家的不同分配不同后缀,这些域名即为该国的国内顶级域名。目前即为该国的国内顶级域名。目前200多个国家和地区都按照多个国家和地区都按照ISO3166国家代国家代码分配了顶级域名,例如中国是码分配了顶级域名,例如中国是cn,美国是,美国是us,日本是,日本是jp等。等。p 二级域名:指顶级域名之下的域名。在国际顶级域名下,它是指域名注册人二级域名:指顶级域名之下的域名
10、。在国际顶级域名下,它是指域名注册人的网上名称,例如的网上名称,例如ibm,yahoo,microsoft等;在国家顶级域名下,它是表等;在国家顶级域名下,它是表示注册企业类别的符号,例如示注册企业类别的符号,例如com,edu,gov,net等。等。p 三级域名:一般应用于中小企业及个人注册使用。三级域名:一般应用于中小企业及个人注册使用。DNS(Domain Name Server)是域名解析的服务器。通过DNS服务可以将用户输入的域名解析为与之相关IP地址,从而唯一确定该域名所绑定的域层次结构中的计算机和网络服务。-11-网络网络APIJava中有关网络方面的功能都定义在包中常用的3个网
11、络类:pInetAddress类:封装计算机的类:封装计算机的IP地址和域名。地址和域名。pURL类:统一资源定位器。类:统一资源定位器。pURLConnection类:类:URL指定的数据源的动态连接。指定的数据源的动态连接。-12-InetAddress类类 InetAddress类用来封装IP地址和该地址的域名。InetAddress类内部隐藏了地址数字,它不需要用户了解如何实现地址的细节。InetAddress类无构造方法,不能直接创建其对象。方法名方法名功能说明功能说明public static InetAddress getLocalHost()获得本地机的InetAddress对
12、象,当查找不到本地机器的地址时,抛出一个UnknownHostException异常public static InetAddress getByName(String host)获得由host指定的InetAddress对象,host是计算机的域名(或IP)。如果找不到主机会抛出UnknownHostException异常public static InetAddress getAllByName(String host)获得具有相同名字的一组InetAddress对象,如果找不到主机会抛出UnknownHostException异常public static InetAddress get
13、ByAddress(byte addr)获取addr所封装的IP地址对应的InetAddress对象,如果找不到主机会抛出UnknownHostException异常public String getCanonicalHostName()从域名服务中获得标准的主机名public bytes getHostAddress()获得主机IP地址public String getHostName()获得主机名public String toString()获得主机名和IP地址的字符串-13-URL类类-1URL(Uniform Resource Locator)统一资源定位器,表示Internet上某
14、一资源的地址。通过URL可以访问Internet上的各种网络资源。URL是最为直观的一种网络定位方法,符合人们的语言习惯,容易记忆。为了处理方便,Java将URL封装成URL类,可以通过URL对象记录下完整的URL信息。p一个完整的一个完整的URL由协议名、主机名(主机由协议名、主机名(主机IP)、端口号和文件路径)、端口号和文件路径四部分组成:四部分组成:p协议名(协议名(protocol):指明获取资源所使用的传输协议,如):指明获取资源所使用的传输协议,如http、ftp等,使用冒号(:)来将它与其他部分相隔离。等,使用冒号(:)来将它与其他部分相隔离。p主机名(主机名(host):指定
15、获取资源的域名,此部分由左边的双斜线():指定获取资源的域名,此部分由左边的双斜线(/)和右边的单斜线(和右边的单斜线(/)或可选冒号(:)限制。)或可选冒号(:)限制。p端口(端口(port):指定服务的端口号,是可选的参数,由主机名左边):指定服务的端口号,是可选的参数,由主机名左边的冒号(:)和右边的斜线(的冒号(:)和右边的斜线(/)限制。)限制。p文件路径(文件路径(file):指定访问的文件名及路径。):指定访问的文件名及路径。示例:http:/:8080/index.htm-14-URL类类-2方法名方法名功能说明功能说明public URL(String spec)构造方法,根
16、据指定的spec来创建一个URL对象public URL(String protocol,String host,int port,String file)构造方法,根据指定的协议、主机名、端口号、文件路径及文件名创建一个URL对象public URL(String protocol,String host,String file)构造方法,根据指定的协议、主机名、路径及文件名创建URL对象public String getProtocol()获取该URL的协议名public String getHost()获取该URL的主机名public int getPort()获取该URL的端口号,如果
17、没有设置端口,返回-1public String getFile()获取该URL的文件名public String getRef()获取该URL在文件中的相对位置public String getQuery()获取该URL的查询信息public String getPath()获取该URL的路径public String getRef()获得该URL的锚-15-URLConnection类类URLConnection类:URLConnection是一个抽象类,代表与URL指定的数据源的动态连接,它提供了服务器交互控制,允许使用POST、PUT或HTTP请求方法将数据送回服务器。URLConne
18、ction的方法如下:方法名方法名功能说明功能说明public int getContentLength()获得文件的长度public String getContentType()获得文件的类型public long getDate()获得文件创建的时间public long getLastModified()获得文件最后修改的时间public InputStream getInputStream()获得输入流,以便读取文件的数据public OutputStream getOutputStream()获得输出流,以便输出数据-16-Socket网络通信网络通信套接字(Socket)允许程序
19、将网络连接当成一个流,可以向这个流中写字节,也可以从这个流中读取字节。套接字为程序员屏蔽了网络的底层细节,例如媒体类型、信息包的大小、网络地址、信息的重发等。TCP/IP套接字用于在主机和Internet之间建立可靠的、双向的、持续的、点对点的流式连接。一个套接字可以用来建立Java的输入/输出系统到其他的驻留在本地机或Internet上的任何机器的程序的连接。Java中有两类TCP套接字:一种是服务器套接字(ServerSocket);另一种是客户端套接字(Socket)。ServerSocket类设计成在等待客户建立连接之前不做任何事的“监听器”。Socket类为建立连向服务器套接字以及启
20、动协议交换而设计。利用Socket类的方法,就可以实现两台计算机之间的通信。-17-Socket类类 Socket是网络上运行的两个程序间双向通信的一端,它既可以接受请求,也可以发送请求,利用它可以较为方便地编写网络上数据的传递。Socket常用方法及功能:方法名方法名功能说明功能说明public Socket(String host,int port)创建一个到主机host、端口号为port的套接字,并连接到远程主机public Socket(InetAddress host,int port)创建一个套接字,使用host中封装的主机信息、端口号为port,并连接到主机public Inet
21、Address getInetAddress()返回连接到远程主机的地址,如果连接失败,则返回以前连接的主机public int getPort()返回Socket连接到远程主机的端口号public int getLocalPort()返回本地连接终端的端口号public InputStream getInputStream()返回一个输入流,利用这个流就可以从套接字读取数据public OutputStream getOutputStream()返回一个输出流,可以在应用程序中写数据到套接字的另一端public synchronized void close()关闭当前Socket连接-18
22、-Socket的工作步骤的工作步骤 Socket的工作步骤如下:1.根据指定地址和端口创建一个根据指定地址和端口创建一个Socket对象。对象。2.调用调用getInputStream()方法或方法或getOutputStream()方法打开连接到方法打开连接到Socket的输入的输入/出流。出流。3.客户端与服务器根据一定的协议交互,直到关闭连接。客户端与服务器根据一定的协议交互,直到关闭连接。4.关闭客户端的关闭客户端的Socket。示例try/127.0.0.1是TCP/IP协议中默认的本机地址Socket socket=new Socket(127.0.0.1,1210);catch(
23、IOException ioe)System.out.println(Error:+ioe);catch(UnknownHostException uhe)System.out.println(Error:+uhe);-19-ServerSocket类类 服务器套接字(ServerSocket)运行在服务器上,并监听在特定端口的TCP连接。ServerSocket类中包含了创建ServerSocket对象的构造方法、在指定端口监听的方法、建立连接后发送和接收数据的方法。ServerSocket类的方法:方法名方法名功能说明功能说明public ServerSocket(int port)构造方
24、法,根据指定端口创建ServerSocket实例public Socket accept()这是一个阻塞方法,它停止执行代码流,并等待下一个客户端的连接。当客户端请求连接时,accept()方法返回一个Socket对象public void close()关闭当前ServerSocket实例public InetAddress getInetAddress()返回当前ServerSocket实例的地址信息public int getLocalPort()返回当前ServerSocket实例的服务端口-20-ServerSocket的工作步骤的工作步骤 ServerSocket的工作步骤如下:S
25、erverSocket server=null;try/创建一个ServerSocket在端口1210监听客户请求server=new ServerSocket(1210);catch(IOException e)System.out.println(can not listen to:+e);Socket socket=null;try socket=server.accept();catch(IOException e)System.out.println(Error:+e);1.根据指定端口创建一个新的ServerSocket对象。2.调用ServerSocket的accept()方法,
26、在指定的端口监听到来的连接。accept()一直处于阻塞状态,直到有客户端试图建立连接。这时accept()方法返回连接客户端与服务器的Socket对象。3.调用getInputStream()方法或getOutputStream()方法建立与客户端交互的输入/输出流。4.服务器与客户端根据一定的协议交互,直到关闭连接。5.关闭服务器端的Socket。6.回到第2步,继续监听下一次的连接。-21-C/S实例实例 使用Socket进行Client/Server程序设计的一般过程如下:1.Server端端Listen(监听)某个端口是否有连接请求。(监听)某个端口是否有连接请求。2.Client端
27、向端向Server端发出端发出Connect(连接)请求。(连接)请求。3.Server端向端向Client端发回端发回Accept(接收)消息并建立连接。(接收)消息并建立连接。4.通过通过getInputStream()和和getOutStream()方法来得到对应的输入方法来得到对应的输入/输出流,输出流,Server端和端和Client端端都可以相互读写数据。都可以相互读写数据。5.关闭关闭Server端和端和Client端的端的Socket。-22-Socket交互编程模型交互编程模型-23-Socket数据流传递步骤数据流传递步骤-24-多线程多线程Socket通信通信 在实际应用
28、中,服务器可以接收来自其他多个客户端的请求,提供相应的服务。为了实现在服务器方给多个客户提供服务的功能,需要对上面的程序进行改造,利用多线程实现多客户机制。服务器总是在指定的端口上监听是否有客户请求,一旦监听到客户请求,服务器就会启动一个专门的服务线程来响应该客户的请求,而服务器本身在启动完线程之后马上又进入监听状态,等待下一个客户的到来。public class Server2 extends ThreadserverSocket=new ServerSocket(1210);public void run()/接收一个套接字Socket socket=serverSocket.accept
29、();/创建一个从套接自重读数据的管道,即输入流,读客户的信息BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream();System.out.println(in.readLine();/创建一个往套接字中写数据的管道,即输出流,给客户发送返回信息PrintWriter out=new PrintWriter(socket.getOutputStream();out.println(您好,SERVERSOCKET服务器已收到,您中大奖了!奖励重新再买一次。);out.flush();/关
30、闭if(in!=null)in.close();if(out!=null)out.close();if(socket!=null)socket.close();-25-聊天室聊天室 线程线程AcceptSocketThread用于循环接收客户端发来的Socket连接,并将与该Socket通信的输入流和输出流保存到ArrayList集合中;再再GetMsgFromClient线程线程用于接收客户端发来的聊天信息,并将信息保存到LinkedList集合中。SendMsgToClient线程线程用于将LinkedList集合中的聊天信息发给所有客户端。如此实现多人聊天,所有客户端都能看到大家发送的聊
31、天信息。注意:注意:在局域网环境中,需要指定其中的一台机器作为服务器并运行服务器端应用程序;其他机器运行客户端应用程序,在运行前还需要将“127.0.0.1”改为服务器的真正IP。-26-IP协议是一个无连接、不可靠的协议TCP协议是一个面向连接,可靠的协议UDP协议是一个面向无连接,不可靠的协议域名是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称DNS(Domain Name Server)是进行域名解析的服务器URL(Uniform Resource Locator)是一致资源定位器的简称URL的组成:协议名:/机器名端口号文件名内部引用URLConnection是一个抽象类,代表与URL指定的数据源的动态连接网络上的两个程序通过Socket实现双向通讯和数据交换Java提供了两个类Socket和ServerSocket,分别用来表示双向连接的客户端和服务端在创建Socket或ServerSocket是必须捕获或抛出异常在Socket对象使用完毕时,要将其关闭,并且遵循一定的关闭次序小结小结谢 谢 Thanks for listening.