31 lines
1.0 KiB
Scala
31 lines
1.0 KiB
Scala
import java.io.PrintWriter
|
|
import java.net.{ServerSocket, Socket}
|
|
|
|
import scala.io.Source
|
|
|
|
object EchoServer extends App {
|
|
private val serverSocket = new ServerSocket(23)
|
|
private var numConnections = 0
|
|
|
|
class ClientHandler(clientSocket: Socket) extends Runnable {
|
|
private val (connectionId, closeCmd) = ({numConnections += 1; numConnections}, ":exit")
|
|
|
|
override def run(): Unit =
|
|
new PrintWriter(clientSocket.getOutputStream, true) {
|
|
println(s"Connection opened, close with entering '$closeCmd'.")
|
|
Source.fromInputStream(clientSocket.getInputStream).getLines
|
|
.takeWhile(!_.toLowerCase.startsWith(closeCmd))
|
|
.foreach { line =>
|
|
Console.println(s"Received on #$connectionId: $line")
|
|
println(line) // Echo
|
|
}
|
|
Console.println(s"Gracefully closing connection, #$connectionId")
|
|
clientSocket.close()
|
|
}
|
|
|
|
println(s"Handling connection, $connectionId")
|
|
}
|
|
|
|
while (true) new Thread(new ClientHandler(serverSocket.accept())).start()
|
|
}
|