Advertisement
Guest User

Untitled

a guest
Sep 15th, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 2.54 KB | None | 0 0
  1. package examples
  2.  
  3. import java.io._
  4. import java.net.{InetAddress,ServerSocket,Socket,SocketException}
  5. import java.util.Random
  6.  
  7. /**
  8.  * Simple client/server application using Java sockets.
  9.  *
  10.  * The server simply generates random integer values and
  11.  * the clients provide a filter function to the server
  12.  * to get only values they interested in (eg. even or
  13.  * odd values, and so on).
  14.  */
  15. object randomclient {
  16.      
  17.   def main(args: Array[String]) {
  18.     val filter: Int => Boolean = try {
  19.       Integer.parseInt(args(0)) match {
  20.         case 1 => x: Int => x % 2 != 0
  21.         case 2 => x: Int => x % 2 == 0
  22.         case _ => x: Int => x != 0
  23.       }
  24.     }
  25.     catch {
  26.       case _ => x: Int => x < 100
  27.     }
  28.  
  29.     try {
  30.       val ia = InetAddress.getByName("localhost")
  31.       val socket = new Socket(ia, 9999)
  32.       val out = new ObjectOutputStream(
  33.         new DataOutputStream(socket.getOutputStream()))
  34.       val in = new DataInputStream(socket.getInputStream())
  35.  
  36.       out.writeObject(filter)
  37.       out.flush()
  38.  
  39.       while (true) {
  40.         val x = in.readInt()
  41.         println("x = " + x)
  42.       }
  43.       out.close()
  44.       in.close()
  45.       socket.close()
  46.     }
  47.     catch {
  48.       case e: IOException =>
  49.         e.printStackTrace()
  50.     }
  51.   }
  52.  
  53. }
  54.  
  55. object randomserver {
  56.  
  57.   def main(args: Array[String]): Unit = {
  58.     try {
  59.       val listener = new ServerSocket(9999);
  60.       while (true)
  61.         new ServerThread(listener.accept()).start();
  62.       listener.close()
  63.     }
  64.     catch {
  65.       case e: IOException =>
  66.         System.err.println("Could not listen on port: 9999.");
  67.         System.exit(-1)
  68.     }
  69.   }
  70.  
  71. }
  72.  
  73. case class ServerThread(socket: Socket) extends Thread("ServerThread") {
  74.  
  75.   override def run(): Unit = {
  76.     val rand = new Random(System.currentTimeMillis());
  77.     try {
  78.       val out = new DataOutputStream(socket.getOutputStream());
  79.       val in = new ObjectInputStream(
  80.         new DataInputStream(socket.getInputStream()));
  81.  
  82.       val filter = in.readObject().asInstanceOf[Int => Boolean];
  83.  
  84.       while (true) {
  85.         var succeeded = false;
  86.         do {
  87.           val x = rand.nextInt(1000);
  88.           succeeded = filter(x);
  89.           if (succeeded) out.writeInt(x)
  90.         } while (! succeeded);
  91.         Thread.sleep(100)
  92.       }
  93.  
  94.       out.close();
  95.       in.close();
  96.       socket.close()
  97.     }
  98.     catch {
  99.       case e: SocketException =>
  100.         () // avoid stack trace when stopping a client with Ctrl-C
  101.       case e: IOException =>
  102.         e.printStackTrace();
  103.     }
  104.   }
  105.  
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement