Created
December 16, 2010 05:48
-
-
Save alinpopa/743087 to your computer and use it in GitHub Desktop.
Scala Multicast Client
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.net.{DatagramPacket, InetAddress, MulticastSocket, SocketTimeoutException} | |
import java.lang.{Runnable, Thread, StringBuilder} | |
import java.util.{Timer, TimerTask, List, ArrayList} | |
object TestUdpClient { | |
class UdpClient(val address: String, val port: Int) { | |
private val socket = new MulticastSocket(port) | |
private val group = InetAddress.getByName(address) | |
socket.joinGroup(group) | |
socket.setSoTimeout(250) | |
private val receiveTimer = new Timer("receiveTimer",true) | |
private val receiverTask = new ReceiverTask | |
receiveTimer.schedule(receiverTask, 2000) | |
private class ReceiverTask extends TimerTask { | |
private var finished = false | |
override def run = {finished = true} | |
def isFinished = finished | |
} | |
def execute: String = { | |
val msg = "QUERY" | |
val data = new DatagramPacket(msg.getBytes(), 0, msg.length(), group, port) | |
socket.send(data) | |
val dataToReturn = new ArrayList[String]() | |
while(!receiverTask.isFinished){ | |
receive(dataToReturn) | |
} | |
dataToReturn.toString | |
} | |
private def receive(dataToReturn: List[String]): Unit = { | |
val buffer = Array.ofDim[Byte](1024) | |
val receivedPacket = new DatagramPacket(buffer, buffer.length) | |
try{ | |
socket.receive(receivedPacket) | |
dataToReturn.add(new String(receivedPacket.getData).trim) | |
}catch{ | |
case e:SocketTimeoutException => // | |
} | |
} | |
} | |
def main(args: Array[String]): Unit = { | |
val dataBuffer = new StringBuilder | |
val dataToReturn = new UdpClient("224.0.0.1", 1234).execute | |
println("CLIENT: got data: " + dataToReturn) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment