第三十二章 UDP 客戶端 服務(wù)器通信
本頁(yè)介紹如何使用 UDP
在進(jìn)程之間建立遠(yuǎn)程通信爹梁。
介紹
通過%Net.UDP
來支持 UDP
识樱。此類提供以下方法: Send()
數(shù)據(jù)包到指定的目的地和端口、 Recv()
來自套接字的數(shù)據(jù)包以及Reply()
發(fā)送器最后收到的數(shù)據(jù)包揭绑。
目標(biāo)被標(biāo)識(shí)為本地主機(jī)名或者 IPv4
或 IPv6
主機(jī)地址递鹉。該端口可以是指定的端口號(hào)或動(dòng)態(tài)端口分配盟步。
建立UDP
套接字
要使用 UDP
,必須使用%New()
方法來創(chuàng)建 UDP
套接字對(duì)象躏结。然后却盘,該對(duì)象實(shí)例用于發(fā)送、接收和回復(fù)數(shù)據(jù)包傳輸媳拴。
創(chuàng)建 UDP
套接字對(duì)象時(shí)黄橘,可以指定端口號(hào)和主機(jī)地址,如下例所示:
SET UPDOref=##class(%Net.UDP).%New(3001,"0.0.0.0")
端口號(hào)和主機(jī)地址都是可選的屈溉。 %New()
方法返回 UDP
套接字對(duì)象實(shí)例的 OREF
(對(duì)象引用)塞关。
- 服務(wù)器等待接收請(qǐng)求,然后提供所請(qǐng)求的信息子巾。因此帆赢,傳輸?shù)倪@一方可以稱為接收方或提供方。當(dāng)提供者創(chuàng)建
UDP
對(duì)象時(shí)线梗,它必須定義接收請(qǐng)求的端口號(hào)椰于。 - 客戶端發(fā)送信息請(qǐng)求,然后接收回復(fù)仪搔。因此瘾婿,傳輸?shù)倪@一方可以稱為發(fā)送方或請(qǐng)求方。當(dāng)請(qǐng)求者創(chuàng)建
UDP
對(duì)象時(shí)僻造,它可以使用動(dòng)態(tài)端口號(hào)憋他。默認(rèn)值為0
孩饼。當(dāng)它發(fā)送數(shù)據(jù)包時(shí)髓削,必須指定提供者的主機(jī)名和端口號(hào)。
主機(jī)地址
Send()
方法指定目標(biāo)的二進(jìn)制地址镀娶。這是主機(jī)地址的二進(jìn)制版本立膛。必須使用GetHostAddr()
方法創(chuàng)建此二進(jìn)制主機(jī)地址,如下所示:
SET client=##class(%Net.UDP).%New()
SET addrbin=##class(%Net.UDP).GetHostAddr("172.16.61.196")
WRITE client.Send("message text",addrbin,3001)
以向GetHostAddr()
指定主機(jī)名、IPv4
地址或 IPv6
地址宝泵,如以下示例所示:
SET hostname="MYLAPTOP"
SET IPv4="172.16.61.196"
SET IPv6="::1"
SET flag=$SYSTEM.INetInfo.CheckAddressExist(hostname)
IF flag=1 { SET addrbin=##class(%Net.UDP).GetHostAddr(hostname)
WRITE "host name valid",! }
ELSE { WRITE "not a hostname: ",hostname,! }
SET flag=$SYSTEM.INetInfo.CheckAddressExist(IPv4)
IF flag=1 { SET addrbin=##class(%Net.UDP).GetHostAddr(IPv4)
WRITE "IPv4 valid",! }
ELSE { WRITE "not an IPv4 address: ",IPv4,! }
SET flag=$SYSTEM.INetInfo.CheckAddressExist(IPv6)
IF flag=1 { SET addrbin=##class(%Net.UDP).GetHostAddr(IPv6)
WRITE "IPv6 valid",! }
ELSE { WRITE "not an IPv6 address: ",IPv6,! }
可以使用AddrToHostName()
方法將此二進(jìn)制主機(jī)地址擴(kuò)展回主機(jī)名好啰,如以下示例所示:
SET addrbin=##class(%Net.UDP).GetHostAddr("MYLAPTOP")
WRITE $SYSTEM.INetInfo.AddrToHostName(addrbin)
可以使用LocalHostName()
法來確定主機(jī)名《蹋可以使用HostNameToAddr()
方法將主機(jī)名轉(zhuǎn)換為 IPv4
或 IPv6
地址框往,如以下示例所示:
SET localhost=$SYSTEM.INetInfo.LocalHostName() /* get host name */
WRITE "local host name is ",localhost,!
SET addrbin=##class(%Net.UDP).GetHostAddr(localhost) /* compress to binary address */
WRITE "binary form of IP address is ",addrbin,!
SET hostname=$SYSTEM.INetInfo.AddrToHostName(addrbin) /* expand binary address to host name */
WRITE "binary IP address expands to ",hostname,!
SET ipaddr=$SYSTEM.INetInfo.HostNameToAddr(hostname) /* host name to IP address */
WRITE "hostname corresponds to IP address ",ipaddr,!