Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //SERVER
- import java.net._
- import java.io._
- import scala.io._
- import scala.util.control._
- object HelloServerWorld {
- class ScalaServer(val _conn: Socket) extends Runnable {
- val CONN = _conn
- val in = new DataInputStream(CONN.getInputStream())
- val out = new DataOutputStream(CONN.getOutputStream())
- def getListOfFiles(dir: String):List[File] = {
- val d = new File(dir)
- if (d.exists && d.isDirectory) {
- d.listFiles.filter(_.isFile).toList
- } else {
- List[File]()
- }
- }
- def Pwd() : Unit = {
- val dir = System.getProperty("user.dir")
- out.writeUTF(dir)
- out.flush()
- }
- def ls() : Unit = {
- val Currdir = System.getProperty("user.dir")
- val files = getListOfFiles(Currdir)
- /* out.writeUTF(files)
- out.flush()
- files.foreach(out.writeUTF)*/
- var dirs :String = "\n"
- for ( i <- 0 to (files.length - 1)) {
- println(files(i).getName())
- dirs += '\t'+files(i).getName()+'\n'
- }
- out.writeUTF(dirs)
- out.flush()
- }
- def cd() : Unit = {
- val outer = new Breaks
- outer.breakable {
- while(true)
- {
- out.writeUTF("Insert absolute path of the directory that you want to navigate to: ")
- out.flush()
- var dir :String = in.readUTF()
- println(dir)
- System.setProperty("user.dir", dir)
- println(System.getProperty("user.dir"))
- out.writeUTF("Current directory is: "+System.getProperty("user.dir"))
- out.flush()
- outer.break
- }
- }
- }
- def saveFile():Unit={
- val fos = new FileOutputStream("Test.png")
- var buffer = new Array[Byte](4096)
- var filesize:Int = 673231 // Send file size in separate msg
- var read:Int = 0
- var totalRead:Int = 0
- var remaining:Int = filesize
- read = in.read(buffer, 0, Math.min(buffer.length, remaining))
- while(read > 0) {
- totalRead += read
- remaining -= read
- println("read " + totalRead + " bytes.")
- fos.write(buffer, 0, read)
- read = in.read(buffer, 0, Math.min(buffer.length, remaining))
- }
- fos.close()
- out.writeUTF("file sent successfully")
- out.flush()
- }
- def mkdir() : Unit = {
- out.writeUTF("Name of new directory: ")
- out.flush()
- val _dirName = in.readUTF()
- val mkDir = new File(System.getProperty("user.dir") + "/" + _dirName)
- val successful = mkDir.mkdir();
- if(successful) {
- out.writeUTF("Directory successfully created")
- }else {
- out.writeUTF("Unable to create directory")
- }
- out.flush()
- }
- def rm() : Unit = {
- out.writeUTF("Name of file/directory to delete: ")
- out.flush()
- val delPath = in.readUTF()
- val rm = new File(System.getProperty("user.dir") + "/" + delPath)
- if(rm.exists) {
- rm.delete()
- out.writeUTF("Deleted successfully")
- }else {
- out.writeUTF("Unable to delete")
- }
- out.flush()
- }
- def logic() : Unit = {
- while(true){
- val received = in.readUTF()
- println("Message Received:" + received)
- if(received == "pwd"){
- Pwd()
- }else if (received == "ls"){
- ls()
- }else if(received == "cd"){
- cd()
- }else if(received == "get"){
- out.writeUTF("Feature currently not supported")
- }else if(received == "put"){
- saveFile()
- }else if(received == "rm"){
- rm()
- }else if(received == "mkdir"){
- mkdir()
- }else{
- out.writeUTF(received)
- out.flush()
- }
- }
- }
- def run {
- logic()
- }
- }
- def main(args: Array[String]){
- val server = new ServerSocket(9999)
- val cont = true
- while (cont) {
- val s = server.accept()
- println(s.getRemoteSocketAddress())
- new Thread(new ScalaServer(s)).start
- }
- }
- }
- //CLIENT
- import java.net._
- import java.io._
- import scala.io._
- import scala.util.control._
- def sendFile(file:String):Unit={
- val dos = out
- val fis = new FileInputStream(file);
- var buffer = new Array[Byte](4096);
- while (fis.read(buffer) > 0) {
- dos.write(buffer);
- }
- fis.close();
- }
- val s = new Socket(InetAddress.getByName("localhost"), 9999)
- lazy val in = new DataInputStream(s.getInputStream())
- val out = new DataOutputStream(s.getOutputStream())
- while (true) {
- println("Text to send: ")
- val text = StdIn.readLine()
- out.writeUTF(text)
- out.flush()
- if(text=="put")
- {
- println("Insert path of file to upload: ")
- val filePath = StdIn.readLine()
- sendFile(filePath)
- }
- println("Message from server: " + in.readUTF())
- //s.close()
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement