Skip to content

Instantly share code, notes, and snippets.

@alinpopa
Created December 16, 2010 05:48
Show Gist options
  • Save alinpopa/743087 to your computer and use it in GitHub Desktop.
Save alinpopa/743087 to your computer and use it in GitHub Desktop.
Scala Multicast Client
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