文章目录
- 第三十三章 UDP 客户端 服务器通信 - IPv4 和 IPv6
第三十三章 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
传输:
ServerSET sobj=##class(%Net.UDP).%New(3001,"127.0.0.1")SET inmsg=sobj.Recv()
ClientSET 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
传输:
ServerSET 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" }
ClientSET 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
类文档中找到。