第17章 网络编程
来源:互联网 发布:美容美发管理软件源码 编辑:程序博客网 时间:2024/06/04 17:49
第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.提高访问速度
- 第17章 网络编程
- 第15章 网络编程
- 第22章 网络编程
- 第13章:网络编程
- 第11章 网络编程
- Unix网络编程代码 第17章 ioctl操作
- 【读书笔记】TCP/IP网络编程 第17章 Linux epoll
- 第18章 网络编程基础
- unix网络编程第1章:简介
- Unix网络编程上卷--第5章
- 第10章 网络编程 02_TCP_Socket_1
- 第10章 网络编程 03_TCP_Socket_2
- 第10章 网络编程 04_TCP_Socket_4
- 第10章 网络编程 05_UCP_1
- 第10章 网络编程 06_UCP_2
- 第10章 网络编程 07_UCP_3
- 孙鑫VC++第14章网络编程
- 第7章 TCP网络编程基础
- Problem D: C语言习题5.25--文件操作2
- mysql配置优化
- 使用 RMI + ZooKeeper 实现远程调用框架
- 1.2字符串包含
- ML学习笔记(一):naive bayas
- 第17章 网络编程
- 高性能服务器架构思路
- Android touch冲突解决小记
- LINQ中ForEach方法的使用
- Android中LruCache到底是如何配合LinkedHashMap实现LRU算法
- 新菜鸟的诞生
- C语言基础 for循环计算1到100的累加和
- 面向对象数据库
- [SQL Server]分页功能的实现