网络编程
Posted xxMYxx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络编程相关的知识,希望对你有一定的参考价值。
第17章 网络编程
17.1 网络编程的基础知识
17.1.1 网络基础知识
通信协议负责对传输速率,传输代码,代码结构,传输控制步骤,出错控制等制度处理标准,
通信协议通常由三个部分组成
1. 语义部分 用于决定双发对话的类型,
2. 语法部分 用于决定双方对话的格式
3. 变换规则 用于决定通信双方的应答关系
IP (Internet Protocol)协议又称互联网协议 是支持网间互联的数据报协议
TCP(Transmission Control Protocol) 传输控制协议 是一种可靠的数据信息传递服务
17.1.2 IP地址和端口号
IP地址是一个32位 ,但通常为了便于记忆,通常把它分成4个8位的2进制,每8位之间用圆点隔开,每个8位可以转换为0~255的10进制数字
IP地址用于唯一地标示网络上的一个通信实体,
端口号 是一个2的16此方的的整数,用于表示数据交给那个通信程序处理
端口是运用程序与外界的交流出入口
17.2 java的基本网络支持
java为网络提供了java.net包
17.2.1 使用InetAddress
java 提供了InetAddress类来代表IP地址
17.2.3 URL URLConnection URLPermission
URL (Uniform Resource Identifiers) 对象代表统一资源定位器,资源可以是简单的文件或目录,也可以是对更为复杂对象的引用
程序中DownUtils 类中的download()方法按如下步骤来实现多线程下载
1. 创建URL 对象
2. 获取指定URL对象所指向资源的大小通过getContentLength()
3. 在本地磁盘上创建一个与网络资源具有相同大小的空文件
4. 计算每个线程应该下载网络资源的那部分
5. 依次创建,启动多个线程来下载网络资源指定部分
17.3 基于TCP协议的网络编程
TCP/IP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket,从而在两端之间形成虚拟网络,两方就可以通过虚拟链路进行通信
17.3.1 TCP协议基础
IP 协议只能保证可以发送和接收消息,但IP协议还不能保证计算机能发送和接收分组数据包
TCP 协议可以用来提供可靠的并且无差错的通信服务
TCP被称为一种端对端协议 用于发送和接收数据的虚拟链路,发送端并按适当的顺序放好传送,接收端收到后在将其正确的还原
TCP协议使用重发机制
17.3.2 使用ServerSocket 创建TCP服务器端
java中能接收其他实体连接请求的类是ServerSocket,ServerSocket对象用于监听来自客户端的Socket连接
17.3.3使用Socket进行通信
客户端通常可以使用Socket的构造器来连接到指定的服务器
17.3.4 加入多线程
客户端读取服务器数据的线程会被阻塞,所以系统应该单独启动一个线程,用来专门从服务器端读取数据
每一个客户端应该包含两个线程 一个负责读取用户的键盘输入,并写入输出流中 另一个负责读取流中输出流
17.3.5 记录用户信息
程序中可以使用map集合保存用户状态信息
客户端发送来的信息必须有特殊标志,让服务器判断是公聊还是私聊信息,
如果是私聊信息,客户端在发送不同信息之前,先对这些信息进行适当处理,
17.3.6 半关闭的ServerSocket
在某一些协议中,通信的数据单位可能是多行,在这种情况下如何表示输出数据已经结束了呢
这种情况下ServerSocket提供了如下两个半关闭的方法,只关闭ServerSocket的输入输出流,可以用来表示数据已经发送结束
shutdownInputStream()
shutdowmOutputStream()
17.3.7 使用NIO实现非阻塞Socket通信
java1.4 开始,java提供了NIO API 来开发高性能的网络服务器,前面介绍的网络通信程序也是基于阻塞式的API的,因此服务器必须为每一个客户端都提供一个独立的线程进行处理,这种做法会导致性能下降 使用NIO API 则可以让服务器端使用有限的线程处理连接到服务器端的所有客户端
17.4 基于UDP 协议的网络编程
UDP是一种不可靠网络协议,它在通信实例的两端各建立一个Socket,但这两个Socket之间并没有虚拟链路,这两个Socket只是接受和发送数据包的对象,java提供了DatagramSocket对象作为UDP协议的Socket
17.4.1 UDP协议基础
UDP User Datagram Protocol 用户数据报协议,主要是用来支持需要在计算机之间传输数据的网络连接 UDP是一种面向非连接的协议(正式通信之前不必建立与对方建立连接)不可靠协议 使用于一次穿少量数据
UDP协议主要是完成网络数据流和数据包之间的转换,在信息的发送端,UDP协议将网络数据流封装成数据包,然后将数据报发送出去,在信息的接收端UDP协议将数据报转换成实际的内容
17.4.2 使用DatagramSocket发送和接收数据
java使用DatagramSocket代表UDP协议的Socket,DatagramSocket本身只是码头,不维护状态,不能产生IO流,它唯一的作用是接收和发送数据报
17.5 使用代理服务器
java 5 开始java在java.net包下提供了Proxy 和ProxySelect两个类,其中Proxy代表代理服务器,ProxySelect表示代理选择类
代理服务器的好处是
1.突破自身的IP限制,对外隐藏自身IP地址,
2.提高访问速度
以上是关于网络编程的主要内容,如果未能解决你的问题,请参考以下文章