没有合适的资源?快使用搜索试试~ 我知道了~
Java socket通信1
需积分: 0 0 下载量 178 浏览量
2022-08-03
15:34:42
上传
评论
收藏 1.05MB PDF 举报
温馨提示
试读
81页
1:简介Java 语言从一开始就是为了让人们使用互联网而设计的,它为实现程序的相互通信提供了许多有用的抽象应用程序接口(API, Application Pro
资源详情
资源评论
资源推荐
java socket 通信
1. 1 简介
2. 2 基本套接字
1. TCP 套接字
1. TCP 客户端
2. TCP 服务器端
2. UDP 套接字
1. UDP 客户端
2. UDP 服务器端
3. 3 发送和接收数据
1. 信息编码
1. 基本整型
2. 字符串和文本
3. 成帧与解析
4. 构建和解析协议消息
1. 消息类 VoteMsg 展示了每条消息中的基本信息
2. 编码和解码类接口 VoteMsgCoder
3. 基于文本的编码解码类 VoteMsgTextCoder
4. 基于二进制的编码解码类 VoteMsgBinCoder
5. 服务器中记录投票过程的服务类 VoteService
6. TCP 投票客户端类 VoteClientTCP
7. TCP 投票服务器端类 VoteServerTCP
8. UDP 投票客户端类 VoteClientUDP
9. UDP 投票服务器端类 VoteServerUDP
4. 4 多任务处理
1. 一客户一线程
2. 线程池
3. 利用 JDK 提供的线程池 javautilconcurrent 包中来实现并行服务器
4. 阻塞和超时
5. 多接收者
1. 广播
2. 多播
6. Keep-Alive 机制
7. 发送和接收缓存区的大小
8. 消除缓冲延迟
9. 关闭连接
5. 4NIO
1. Buffer 详解
2. 流 TCP 信道详解
3. Selector 详解
4. 数据报 UDP 信道
1:简介
Java 语言从一开始就是为了让人们使用互联网而设计的,它为实现程序的相互通信提供了
许多有用的抽象应用程序接口(API, Application Programming Interface),这类应用程
序接口被称为套接字(sockets)。
信息(information)是指由程序创建和解释的字节序列。在计算机网络环境中,这些字节
序列被称为分组报文(packets)。一组报文包括了网络用来完成工作的控制信息,有时还
包括一些用户数据。用于定位分组报文目的地址的信息就是一个例子。路由器正是利用了
这些控制信息来实现对每个报文的转发。
协议(protocol)相当于是相互通信的程序间达成的一种约定,它规定了分组报文的交换
方式和它们包含的意义。一组协议规定了分组报文的结构(例如报文中的哪一部分表明了
其目的地址)以及怎样对报文中所包含的信息进行解析。设计一组协议,通常是为了在一
定约束条件下解决某一特定的问题。比如,超文本传输协议(HTTP,HyperText Transfer
Protocol)是为了解决在服务器间传递超文本对象的问题,这些超文本对象在服务器中创
建和存储,并由 Web 浏览器进行可视化,以使其对用户有用。即时消息协议是为了使两
个或更多用户间能够交换简短的文本信息。
Application:应用程序;Socket:套接字;Host:主机;Channel:通信信道;Ethernet:
以太网;Router:路由器;Network Layer:网络层;Transport Layer:传输层。
IP 协议提供了一种数据报服务:每组分组报文都由网络独立处理和分发,就像信件或包裹
通过邮政系统发送一样。为了实现这个功能,每个 IP 报文必须包含一个保存其目的地址
(address)的字段,就像你所投递的每份包裹都写明了收件人地址。(我们随即会对地
址进行更详细的说明。)尽管绝大部分递送公司会保证将包裹送达,但 IP 协议只是一个"
尽力而为"(best-effort)的协议:它试图分发每一个分组报文,但在网络传输过程中,偶
尔也会发生丢失报文,使报文顺序被打乱,或重复发送报文的情况。
IP 协议层之上称为传输层(transport layer)。它提供了两种可选择的协议:TCP 协议和
UDP 协议。这两种协议都建立在 IP 层所提供的服务基础上,但根据应用程序协议
(application protocols)的不同需求,它们使用了不同的方法来实现不同方式的传输。
TCP 协议和 UDP 协议有一个共同的功能,即寻址。回顾一下,IP 协议只是将分组报文分
发到了不同的主机,很明显,还需要更细粒度的寻址将报文发送到主机中指定的应用程
序,因为同一主机上可能有多个应用程序在使用网络。TCP 协议和 UDP 协议使用的地址
叫做端口号(port numbers),都是用来区分同一主机中的不同应用程序。TCP 协议和
UDP 协议也称为端到端传输协议(end-to-end transport protocols),因为它们将数据从
一个应用程序传输到另一个应用程序,而 IP 协议只是将数据从一个主机传输到另一主机。
TCP 协议能够检测和恢复 IP 层提供的主机到主机的信道中可能发生的报文丢失、重复及
其他错误。TCP 协议提供了一个可信赖的字节流(reliable byte-stream)信道,这样应用
程序就不需要再处理上述的问题。TCP 协议是一种面向连接(connection-oriented)的协
议:在使用它进行通信之前,两个应用程序之间首先要建立一个 TCP 连接,这涉及到相互
通信的两台电脑的 TCP 部件间完成的握手消息(handshake messages)的交换。使用
TCP 协议在很多方面都与文件的输入输出(I/O, Input/Output)相似。实际上,由一个程
序写入的文件再由另一个程序读取就是一个 TCP 连接的适当模型。另一方面,UDP 协议
并不尝试对 IP 层产生的错误进行修复,它仅仅简单地扩展了 IP 协议"尽力而为"的数据报
服务,使它能够在应用程序之间工作,而不是在主机之间工作。因此,使用了 UDP 协议
的应用程序必须为处理报文丢失、顺序混乱等问题做好准备。
在 TCP/IP 协议中,有两部分信息用来定位一个指定的程序:互联网地址(Internet
address)和端口号(port number)。其中互联网地址由 IP 协议使用,而附加的端口地址
信息由传输协议(TCP 或 IP 协议)对其进行解析。互联网地址由二进制的数字组成,有
两种型式,分别对应了两个版本的标准互联网协议。现在最常用的版本是版本 4,即
IPv4,另一个版本是刚开始开发的版本 6,即 IPv。IPv4 的地址长 32 位,只能区分大约
40 亿个独立地址,对于如今的互联网来说,这是不够大的。(也许看起来很多,但由于地
址的分配方式的原因,有很多都被浪费了)出于这个原因引入了 IPv6,它的地址有 128 位
长。
一台主机,只要它连接到网络,一个互联网地址就能定位这条主机。但是反过来,一台主
机并不对应一个互联网地址。因为每台主机可以有多个接口,每个接口又可以有多个地
址。(实际上一个接口可以同时拥有 IPv4 地址和 IPv6 地址)。端口号是一组 16 位的无
符号二进制数,每个端口号的范围是 1 到 65535。(0 被保留)。每个版本的 IP 协议都定
义了一些特殊用途的地址。其中值得注意的一个是回环地址(loopback address),该地
址总是被分配个一个特殊的回环接口(loopback interface)。回环接口是一种虚拟设备,
它的功能只是简单地将发送给它的报文直接回发给发送者。IPv4 的回环地址是
127.0.0.1[,IPv6 的回环地址是 0:0:0:0:0:0:0:1。
IPv4 地址中的另一种特殊用途的保留地址包括那些"私有用途"的地址。它们包括 IPv4 中所
有以 10 或 192.168 开头的地址,以及第一个数是 172,第二个数在 16 到 31 的地址。
(在 IPv6 中没有相应的这类地址)这类地址最初是为了在私有网络中使用而设计的,不属
于公共互联网的一部分。现在这类地址通常被用在家庭或小型办公室中,这些地方通过
NAT(Network Address Translation,网络地址转换)设备连接到互联网。NAT 设备的功
能就像一个路由器,转发分组报文时将转换(重写)报文中的地址和端口。更准确地说,
它将一个接口中报文的私有地址端口对(private address, port pairs)映射成另一个接口
中的公有地址端口对(public address, port pairs)。这就使一小组主机(如家庭网络)能
够有效地共享同一个 IP 地址。重要的是这些内部地址不能从公共互联网访问。
多播(multicast)地址。普通的 IP 地址(有时也称为"单播"地址)只与唯一一个目的地址
相关联,而多播地址可能与任意数量的目的地址关联。IPv4 中的多播地址在点分格式中,
第一个数字在 224 到 239 之间。IPv6 中,多播地址由 FF 开始。
习惯于通过名字来指代一个主机,例如:host.example.com。然而,互联网协议只能处理
二进制的网络地址,而不是主机名。首先应该明确的是,使用主机名而不使用地址是出于
方便性的考虑,这与 TCP/IP 提供的基本服务是相互独立的。你也可以不使用名字来编写
和使用 TCP/IP 应用程序。当使用名字来定位一个通信终端时,系统将做一些额外的工作
把名字解析成地址。有两个原因证明这额外的步骤是值得的:第一,相对于点分形式(或
IPv6 中的十六进制数字串),人们更容易记住名字;第二,名字提供了一个间接层,使 IP
地址的变化对用户不可见。如网络服务器 www.mkp.com 的地址就改变过。由于我们通常
都使用网络服务器的名字,而且地址的改变很快就被反应到映射主机名和网络地址的服务
上,如 www.mkp.com 从之前的地址 208.164.121.48 对应到了现在的地址,这种变化对通
过名字访问该网络服务器的程序是透明的。名字解析服务可以从各种各样的信息源获取信
息。两个主要的信息源是域名系统(DNS,Domain Name System)和本地配置数据库。
DNS 是一种分布式数据库。DNS 协议允许连接到互联网的主机通过 TCP 或 UDP 协议从
DNS 数据库中获取信息。本地配置数据库通常是一种与具体操作系统相关的机制,用来实
现本地名称与互联网地址的映射。
客户端(client)和服务器(server)这两个术语代表了两种角色:客户端是通信的发起
者,而服务器程序则被动等待客户端发起通信,并对其作出响应。客户端与服务器组成了
应用程序(application)。服务器具有一定的特殊能力,如提供数据库服务,并使任何客
户端能够与之通信。一个程序是作为客户端还是服务器,决定了它在与其对等端(peer)
建立通信时使用的套接字 API 的形式(客户端的对等端是服务器,反之亦然)。更进一步
来说,客户端与服务器端的区别非常重要,因为客户端首先需要知道服务器的地址和端口
号,反之则不需要。如果有必要,服务器可以使用套接字 API,从收到的第一个客户端通
信消息中获取其地址信息。这与打电话非常相似:被呼叫者不需要知道拨电话者的电话号
码。就像打电话一样,只要通信连接建立成功,服务器和客户端之间就没有区别了。服务
器可以使用任何端口号,但客户端必须能够获知这些端口号。在互联网上,一些常用的端
口号被约定赋给了某些应用程序。
Socket(套接字)是一种抽象层,应用程序通过它来发送和接收数据,就像应用程序打开
一个文件句柄,将数据读写到稳定的存储器上一样。一个 socket 允许应用程序添加到网络
中,并与处于同一个网络中的其他应用程序进行通信。一台计算机上的应用程序向 socket
写入的信息能够被另一台计算机上的另一个应用程序读取,反之亦然。
Applications:应用程序;TCP sockets:TCP 套接字;TCP ports:TCP 端口;Socket
References:套接字引用;UDP sockets:UDP 套接字;Sockets bound to ports:套接字
绑定到端口;UDP ports:UDP 端口。
不同类型的 socket 与不同类型的底层协议族以及同一协议族中的不同协议栈相关联。现在
TCP/IP 协议族中的主要 socket 类型为流套接字(sockets sockets)和数据报套接字
(datagram sockets)。流套接字将 TCP 作为其端对端协议(底层使用 IP 协议),提供
了一个可信赖的字节流服务。一个 TCP/IP 流套接字代表了 TCP 连接的一端。数据报套接
字使用 UDP 协议(底层同样使用 IP 协议),提供了一个"尽力而为"(best-effort)的数据
报服务,应用程序可以通过它发送最长 65500 字节的个人信息。当然,其他协议族也支持
剩余80页未读,继续阅读
小小二-yan
- 粉丝: 23
- 资源: 299
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0