我正在尝试找出本机界面。我正在尝试使用UDP
. 这是我所拥有的:
module UDPTest where
data StringAsBytes = native java.lang.String where
native getBytes :: String -> ST s (Mutable s (JArray Byte))
data InetSocketAddress = native java.net.InetSocketAddress where
native new :: String -> Int -> ST s (Mutable s InetSocketAddress)
data DatagramPacket = native java.net.DatagramPacket where
native new :: Mutable s (JArray Byte) -> Int -> Mutable s InetSocketAddress -> ST s (Mutable s DatagramPacket)
data DatagramSocket = native java.net.DatagramSocket where
native new :: () -> IOMutable DatagramSocket throws SocketException
native send :: Mutable RealWorld DatagramSocket -> MutableIO DatagramPacket -> IO () throws IOException
native close :: MutableIO DatagramSocket -> IO ()
data SocketException = native java.net.SocketException
derive Exceptional SocketException
main _ = do
messageStr = "hello world;\n"
messageAsBytes <- StringAsBytes.getBytes messageStr
address <- InetSocketAddress.new "localhost" 3003
messageLen <- messageAsBytes.getLength
packet <- DatagramPacket.new messageAsBytes messageLen address
socket <- DatagramSocket.new ()
socket.send packet
socket.close
这段代码意外运行,但它让我想知道几件事。首先,应该是什么类型DatagramSocket.new
来反映抛出异常的事实?我试图把它打包进去Maybe
,但结果一团糟。有什么办法吗?目前,我不知道如何处理异常,main
这并没有完全解决它,或者我可能遗漏了一些东西。其次,为什么我被编译器强迫改变InetSocketAddress
为pure
不纯的,在 中使用它DatagramSocket.new
?我还被迫JArray
在代码中需要它的地方使用可变版本。