使用UDP
UDP 无连接的数据报协议,在JDK 级别上提供两种不同的通信方式:
- 套接字可以自由地发送数据报到任何目的地,并从任何来源接收数据报
低级API中区分是——令人困惑地——通过是否在套接字上调用方法(甚至当connect
被调用,协议仍然是无连接的)。UDP 使用的这两种形式是使用不同的 IO 扩展提供的,如下所述。
简单发送
UDP 使用最简单的形式是只发送数据报,而不需要得到回复。为此目的一个”简单的发送者”工具如上所示。UDP 扩展使用SimpleSender
消息查询 ,由SimpleSenderReady
通知回答。此消息的发送者是新创建的发送者actor,从此时起可以用于将数据报发送到任意的目的地 ;在此示例中,它将只发送任何收到的utf-8编码的String
到一个预定义的远程地址。
绑定(和发送)
如果你想要实现一个 UDP 服务器侦听套接字来接收传入数据报,则你需要使用命令,如上所示。指定的本地地址可能会有一个为零的端口,此时操作系统会自动选择一个自由端口并将它分配给新的套接字。通过检查Bound
消息可以发现实际上绑定的是哪个端口。
Bound
消息的发送者是管理新套接字的那个actor。发送数据报是通过使用Send
消息类型实现的,并且套接字可以通过发送一个 Unbind
命令来关闭,这种情况下套接字actor会回复一个Unbound
通知。
连接的 UDP
通过基于连接的 UDP API 提供的服务,类似于我们前面所述的bind-and-send服务,但主要区别是连接只是能够将发送到它连接到de remoteAddress
,并将只能从该地址接收数据报。
因此在这里的例子看起来非常类似于前一个示例,最大的区别是Send
和Received
消息中没有远程地址信息。