第三十三章 UDP 客户端 服务器通信 - IPv4 和 IPv6
UDP 支持 IPv4 和 IPv6 互联网协议。由于这些协议不兼容,服务器和客户端都必须使用相同的Internet协议,否则传输将失败。
IPv4 地址具有以下格式。 n是 0 到 255 范围内的十进制整数:
n.n.n.n
可以将 IPv4 协议指定为"0.0.0.0" 。
IPv6 地址具有以下完整格式。 h是一个具有四个十六进制数字的十六进制数:
h:h:h:h:h:h:h:h
通常,IPv6 地址的缩写方式是消除前导零并用双冒号 (::) 替换连续的零部分; IPv6 地址中只能使用一个双冒号。通过使用 IPv4 缩写规则,可以将 IPv6 协议指定为“::” (意味着所有 8 个h部分的值为 0000)。
建立互联网协议:
- 客户端必须在
%New()方法中建立IPv4或IPv6。默认为IPv4。 - 这必须与
GetHostAddr()方法中指定并在Send()方法中提供(以二进制形式)的IPv4或IPv6协议匹配。
以下是 IPv4 传输:
Server
SET sobj=##class(%Net.UDP).%New(3001,"127.0.0.1")
SET inmsg=sobj.Recv()
Client
SET cobj=##class(%Net.UDP).%New() /* the default is IPv4 */
SET bhost=##class(%Net.UDP).GetHostAddr("127.0.0.1")
SET outmsg="this is the message to send"
WRITE cobj.Send(outmsg,bhost,3001)
以下是 IPv6 传输:
Server
SET x=##class(%SYSTEM.INetInfo).IsIPV6Enabled()
IF x=1 {
SET sobj=##class(%Net.UDP).%New(3001,"::1")
SET inmsg=sobj.Recv() }
ELSE {WRITE "IPv6 not enabled" }
Client
SET cobj=##class(%Net.UDP).%New(0,"::")
SET bhost=##class(%Net.UDP).GetHostAddr("::1")
SET outmsg="this is the message to send"
WRITE cobj.Send(outmsg,bhost,3001)
处理主机地址的方法可在%SYSTEM.INetInfo类文档中找到。