Advertisement
Guest User

Scala Client/Server

a guest
May 29th, 2016
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 4.80 KB | None | 0 0
  1. //SERVER
  2. import java.net._
  3. import java.io._
  4. import scala.io._
  5. import scala.util.control._
  6.  
  7. object HelloServerWorld {
  8.   class ScalaServer(val _conn: Socket) extends Runnable {
  9.     val CONN = _conn
  10.     val in = new DataInputStream(CONN.getInputStream())
  11.     val out = new DataOutputStream(CONN.getOutputStream())
  12.  
  13.     def getListOfFiles(dir: String):List[File] = {
  14.       val d = new File(dir)
  15.       if (d.exists && d.isDirectory) {
  16.         d.listFiles.filter(_.isFile).toList
  17.       } else {
  18.       List[File]()
  19.       }
  20.     }
  21.  
  22.     def Pwd() : Unit = {
  23.         val dir = System.getProperty("user.dir")
  24.         out.writeUTF(dir)
  25.         out.flush()
  26.     }
  27.  
  28.     def ls() : Unit = {
  29.         val Currdir = System.getProperty("user.dir")
  30.         val files = getListOfFiles(Currdir)
  31. /*        out.writeUTF(files)
  32.         out.flush()
  33.         files.foreach(out.writeUTF)*/
  34.         var dirs :String = "\n"
  35.         for ( i <- 0 to (files.length - 1)) {
  36.           println(files(i).getName())
  37.           dirs += '\t'+files(i).getName()+'\n'
  38.         }
  39.         out.writeUTF(dirs)
  40.         out.flush()
  41.     }
  42.  
  43.     def cd() : Unit = {
  44.       val outer = new Breaks
  45.       outer.breakable {
  46.         while(true)
  47.         {
  48.           out.writeUTF("Insert absolute path of the directory that you want to navigate to: ")
  49.             out.flush()
  50.             var dir :String = in.readUTF()
  51.             println(dir)
  52.             System.setProperty("user.dir", dir)
  53.             println(System.getProperty("user.dir"))
  54.             out.writeUTF("Current directory is: "+System.getProperty("user.dir"))
  55.             out.flush()
  56.             outer.break
  57.         }
  58.       }
  59.     }
  60.  
  61.     def saveFile():Unit={
  62.     val fos = new FileOutputStream("Test.png")
  63.     var buffer = new Array[Byte](4096)
  64.    
  65.     var filesize:Int  = 673231 // Send file size in separate msg
  66.     var read:Int = 0
  67.     var totalRead:Int  = 0
  68.     var remaining:Int = filesize
  69.     read = in.read(buffer, 0, Math.min(buffer.length, remaining))
  70.     while(read > 0) {
  71.       totalRead += read
  72.       remaining -= read
  73.       println("read " + totalRead + " bytes.")
  74.       fos.write(buffer, 0, read)
  75.       read = in.read(buffer, 0, Math.min(buffer.length, remaining))
  76.     }
  77.     fos.close()
  78.     out.writeUTF("file sent successfully")
  79.     out.flush()
  80.     }
  81.  
  82.     def mkdir() : Unit = {
  83.     out.writeUTF("Name of new directory: ")
  84.     out.flush()
  85.     val _dirName = in.readUTF()
  86.     val mkDir = new File(System.getProperty("user.dir") + "/" + _dirName)
  87.     val successful = mkDir.mkdir();
  88.     if(successful) {
  89.         out.writeUTF("Directory successfully created")
  90.     }else {
  91.         out.writeUTF("Unable to create directory")
  92.     }
  93.     out.flush()
  94.   }
  95.  
  96. def rm() : Unit = {
  97.     out.writeUTF("Name of file/directory to delete: ")
  98.     out.flush()
  99.     val delPath = in.readUTF()
  100.     val rm = new File(System.getProperty("user.dir") + "/" + delPath)
  101.     if(rm.exists) {
  102.         rm.delete()
  103.         out.writeUTF("Deleted successfully")
  104.     }else {
  105.         out.writeUTF("Unable to delete")
  106.     }
  107.     out.flush()
  108. }
  109.  
  110.     def logic() : Unit = {
  111.       while(true){
  112.         val received = in.readUTF()
  113.         println("Message Received:" + received)
  114.         if(received == "pwd"){
  115.           Pwd()
  116.         }else if (received == "ls"){
  117.           ls()
  118.         }else if(received == "cd"){
  119.           cd()
  120.         }else if(received == "get"){
  121.           out.writeUTF("Feature currently not supported")
  122.         }else if(received == "put"){
  123.           saveFile()
  124.         }else if(received == "rm"){
  125.             rm()
  126.         }else if(received == "mkdir"){
  127.             mkdir()
  128.         }else{
  129.           out.writeUTF(received)
  130.           out.flush()
  131.         }
  132.       }
  133.     }
  134.     def run {
  135.       logic()
  136.     }
  137. }
  138.  
  139.   def main(args: Array[String]){
  140.     val server = new ServerSocket(9999)
  141.     val cont = true
  142.     while (cont) {
  143.         val s = server.accept()
  144.         println(s.getRemoteSocketAddress())
  145.         new Thread(new ScalaServer(s)).start
  146.     }
  147.   }
  148. }
  149.  
  150.  
  151. //CLIENT
  152. import java.net._
  153. import java.io._
  154. import scala.io._
  155. import scala.util.control._
  156.  
  157.  
  158.   def sendFile(file:String):Unit={
  159.     val dos = out
  160.     val fis = new FileInputStream(file);
  161.     var buffer = new Array[Byte](4096);
  162.    
  163.     while (fis.read(buffer) > 0) {
  164.       dos.write(buffer);
  165.     }
  166.    
  167.     fis.close();
  168.   }
  169.  
  170. val s = new Socket(InetAddress.getByName("localhost"), 9999)
  171. lazy val in = new DataInputStream(s.getInputStream())
  172. val out = new DataOutputStream(s.getOutputStream())
  173.  
  174. while (true) {
  175.     println("Text to send: ")
  176.     val text = StdIn.readLine()
  177.     out.writeUTF(text)
  178.     out.flush()
  179.     if(text=="put")
  180.     {
  181.         println("Insert path of file to upload: ")
  182.         val filePath = StdIn.readLine()
  183.         sendFile(filePath)
  184.     }
  185.     println("Message from server: " + in.readUTF())
  186.     //s.close()
  187. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement