我有一個集成測試,需要協調兩個DatagramSockets,每個都在自己的線程中運行。一個套接字等待通過阻塞調用receive()來讀取數據。另一個套接字需要調用send(),但是這必須在receive()被阻塞之後發生,否則數據將會丟失。如何使用UDF協調發送和接收DatagramSockets
的代碼是一個有點像這樣:
接收機
byte[] buf = new byte[1024];
new DatagramSocket(7654).receive(new DatagramPacket(buf, buf.length));
發件人
new DatagramSocket(7654).send(
new DatagramPacket("hello".getBytes(Charset.forName("UTF-8")), 5));
我不願意前把一個Thread.sleep()方法send()調用,儘管這可能足以讓接收器阻塞。有沒有一個優雅的方式來做到這一點?
UDP沒有握手的方法來協調這類工作的一個基本的解決辦法是用等待「準備好」信號的數據包來激發接收器,然後一旦發送者收到確認信息,實際數據就會通過。我沒有發佈這個答案,因爲我確信有更好的方法有人可以指點你,也許[this](http://www.oracle.com/technetwork/java/socket-140484.html#multi)會有幫助嗎? – Grambot
我也想過這個。可能有辦法用Java併發工具來協調事情。 – hertzsprung