<黑马程序员> 第八篇:网络编程
2015-12-07 10:56
302 查看
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
8.1 网络通信协议
8.1.1 InetAddress
在JDK中IP地址使用InetAddress类来表示的。Failed提供了许多和IP地址相关的操作。
由于InetAddress 类以及他的子类没有提供共有的构造方法,若想获得该类的实例对象只能通过调用InetAddress类里的一些静态方法。
其中值得注意的是getHostName()方法,该方法用于得到某个主机的域名,当InetAddress对象表示的是本地主机时,返回的就是本地主机的计算机名,如果表示的不是本地的主机,那么就会返回IP地址对应的主机的域名,如果所表示的主机没有域名,那么就会打印出所表示的主机IP地址。
8.1.2 UDP与TCP协议
UDP:User Datagram Protocol 用户数据报协议
1. 将数据及源和目的封装成数据包中,不需要建立连接(无连接通信协议)
2. 每个数据报的大小在限制在64k内
3. 因无连接,是不可靠协议
4. 不需要建立连接,速度快
TCP:Transmission Control Protocol 传输控制协议
1. 建立连接,形成传输数据的通道。(面向连接通信协议)
2. 在连接中进行大数据量传输
3. 通过三次握手完成连接,是可靠协议
4. 必须建立连接,效率会稍低
8.2 UDP通信
8.2.1 DatagramPacket
使用UDP通信时,发送和接收的数据需要通过“集装箱”进行传输,这里的集装箱就是一个数据包。
在JDK中提供了DatagramPacket类,该类功能就是封装数据包,用于存放、发送或者接收的信息。
8.2.2 DatagramSocket
发送和接收货物都需要使用集装箱,但是只有集装箱还不够,还得有,发送和接收集装箱的码头,在JDK中提供了一个类似码头功能的DatagramSocket类。
8.2.3 UDP网络程序
注意:如果UDP程序所使用的端口号已经被其它的程序占用,需要重新换一个端口号,可以使用: netstat –anb 命令来查看是哪个应用占用此端口。
该命令显示了所有正在运行的应用程序已经它们所占用的端口号,想要解决端口占用的问题,只需关掉占用端口的应用程序或者将一个为占用的端口好重新运行即可。
8.3 TCP通信
为了区别不同应用程序的进程和连接,许多计算机操作系统为应用程序与TCP协议交互提供了套接字(Socket)。
套接字是两台计算机间通信的端点,一旦建立连接,两台计算机之间就把数据当作一个双向字节流进行交换,再通过套接字发送和接收数据。
使用TCP协议进行网络通信时的两个应用程序是不同的,一个称为服务端程序,另一个称为客户端程序。为了完成这种服务端与客户端程序的交互功能,在JDK中提供了两个类,分别是Server Socket和Socket。
8.3.1 Server Socket
在开发TCP服务端程序时,首先需要通过创建Server Socket对象来实现服务端程序,Server Socket位于java.net包中。
Server Socket对象负责监听某台计算机的某个端口号,在创建Server Socket对象后,需要急速调用该对象的accept()方法,接收来自客户端的请求。当执行了accept()方法之后,服务器端程序会发生阻塞,直到客户端发出连接请求,accept()方法会返回一个Socket对象用于和客户端实现通信,程序才能继续向下执行。
8.3.2 Socket
Server Socket对象可以实现服务端程序,但这并不能实现通信,此时还需要一个客户端程序与之交互,在JDK中,提供了一个Socket类用于实现TCP客户端程序。
当客户端和服务端的两个Socket建立了专线连接之后,连接的一端既能向另一端连续写入字节,也能从另一端读取字节,也就是说建立了专线连接的两个Socket是以IO流的方式进行数据交互的,Socket类中定了getInputStream()方法返回Socket的输入流对象,定义了getOutputStream()方法返回Socket的输出流对象。只要连接的一端向该输出流对象写入了数据,连接的另一端就能从其输入流对象中读到这些数据。
8.4 本章小结
本章介绍了TCP协议和UDP协议的区别,以及IP地址、端口号和InetAddress类。着重介绍了与UDP网络编程相关的DatagramPacket 、DatagramSocket类,与TCP网络编程相关的Server Socket、Socket类,通过本章学习,应能了解网络编程的相关知识,熟练的掌握UDP网络程序和TCP网络程序的编写。
相关文章推荐
- iOS9 HTTP 不能正常使用的解决办法
- 11月第4周网络安全报告:遭篡改的.COM网站占75.7%
- HTTP协议详解
- Linux socket本地进程间通信之TCP
- HTTPS接口加密和身份认证
- iOS开发-工具:用CornerStone配置SVN,HTTP及svn简单使用说明
- nginx https
- 黑马程序员---网络编程(UDP、TCP)
- HTTPS对网站性能SEO有哪些影响?
- 大型网站的HTTPS实践一:HTTPS协议和原理三
- 大型网站的HTTPS实践一:HTTPS协议和原理二
- 大型网站的HTTPS实践一:HTTPS协议和原理一
- Ubuntu系统中MySQL服务器搭建,用户设置权限,以及允许网络访问
- javaweb学习总结(八)——HttpServletResponse对象(二)
- LibGDX_7.5: 网络资源的访问(Net)
- 浏览器 HTTP 缓存原理分析
- 记录http协议python接口测试做法和设计想法
- HTTP Status Code
- Spring Web MVC 处理Http请求的过程(SpringMVC 原理)
- 厦门巨游网络科技有限公司(HOTPOWER)承接游戏UI外包